/** * Emulate the Spring WS MessageDispatcherServlet by calling the gateway * with a DOMSource object representing the payload of the original SOAP * 'echoRequest' message. Expect an 'echoResponse' DOMSource object * to be returned in synchronous fashion, which the MessageDispatcherServlet * would in turn wrap in a SOAP envelope and return to the client. */ @Test public void testSendAndReceive() throws Exception { String xml = "<echoRequest xmlns=\"http://www.springframework.org/spring-ws/samples/echo\">hello</echoRequest>"; DomPoxMessageFactory messageFactory = new DomPoxMessageFactory(); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setNamespaceAware(true); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document document = documentBuilder.parse(new InputSource(new StringReader(xml))); Transformer transformer = TransformerFactory.newInstance().newTransformer(); DomPoxMessage request = new DomPoxMessage(document, transformer, "text/xml"); MessageContext messageContext = new DefaultMessageContext(request, messageFactory); gateway.invoke(messageContext); Object reply = messageContext.getResponse().getPayloadSource(); assertThat(reply, is(instanceOf(DOMSource.class))); DOMSource replySource = (DOMSource) reply; Element element = (Element) replySource.getNode().getFirstChild(); assertThat(element.getTagName(), equalTo("echoResponse")); } }
@Override public Object doExtractData(WebServiceMessage message) throws IOException, TransformerException { if (!SimpleWebServiceOutboundGateway.this.extractPayload) { return message; } else { Source payloadSource = message.getPayloadSource(); if (payloadSource != null && this.result != null) { this.transform(payloadSource, this.result); if (this.result instanceof StringResult) { return this.result.toString(); } else if (this.result instanceof DOMResult) { return ((DOMResult) this.result).getNode(); } else { return this.result; } } return payloadSource; } }
public WebServiceMessage createWebServiceMessage() { WebServiceMessage message = mock(WebServiceMessage.class); Source source = mock(Source.class); when(message.getPayloadSource()).thenReturn(source); return message; }
private Source extractSource(Object requestPayload) throws IOException, TransformerException { Source source = null; if (requestPayload instanceof Source) { source = (Source) requestPayload; Object o = SimpleWebServiceOutboundGateway.this.sourceExtractor.extractData(source); Assert.isInstanceOf(Source.class, o); source = (Source) o; } else if (requestPayload instanceof String) { source = new StringSource((String) requestPayload); } else if (requestPayload instanceof Document) { source = new DOMSource((Document) requestPayload); } else if (requestPayload instanceof WebServiceMessage) { source = ((WebServiceMessage) requestPayload).getPayloadSource(); } else { throw new MessagingException("Unsupported payload type '" + requestPayload.getClass() + "'. " + this.getClass().getName() + " only supports 'java.lang.String', '" + Source.class.getName() + "', '" + Document.class.getName() + "' and '" + WebServiceMessage.class.getName() + "'. " + "Consider either using the '" + MarshallingWebServiceOutboundGateway.class.getName() + "' or a Message Transformer."); } return source; }
@Test public void sendString() throws Exception { when(context.getResponse()).thenReturn(response); when(context.getRequest()).thenReturn(request); when(request.getPayloadSource()).thenReturn(stringSource); when(response.getPayloadResult()).thenReturn(stringResult); gateway.invoke(context); assertTrue(output.toString().endsWith(input)); }
@Test public void invokePoxSourceWithReply() throws Exception { when(requestChannel.send(isA(Message.class), eq(1000L))).thenAnswer( withReplyTo(replyChannel)); when(request.getPayloadSource()).thenReturn(payloadSource); gateway.start(); gateway.invoke(context); verify(requestChannel).send(messageWithPayload(payloadSource), eq(1000L)); assertTrue(output.toString().endsWith(input)); }
(this.extractPayload) ? request.getPayloadSource() : request);
@Test(expected = MessageDeliveryException.class) public void invokePoxSourceTimeout() throws Exception { gateway.setRequestTimeout(10); gateway.setReplyTimeout(10); when(requestChannel.send(isA(Message.class), anyLong())).thenReturn(false); when(request.getPayloadSource()).thenReturn(payloadSource); gateway.invoke(context); }
/** Returns the payload source of the given message. */ @Override protected Source getValidationResponseSource(WebServiceMessage response) { return response.getPayloadSource(); } }
transformer.transform(requestMessage.getPayloadSource(), stringResult);
private Element getMessagePayloadElement(WebServiceMessage message) throws TransformerException { Transformer transformer = transformerFactory.newTransformer(); DOMResult domResult = new DOMResult(); transformer.transform(message.getPayloadSource(), domResult); return (Element) domResult.getNode().getFirstChild(); }
/** Returns the request payload as {@code Source}. */ private Source getRequestPayload(MessageContext messageContext) { WebServiceMessage request = messageContext.getRequest(); return request != null ? request.getPayloadSource() : null; }
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); StringResult stringResult = new StringResult(); transformer.transform(requestMessage.getPayloadSource(), stringResult);
private void transformMessage(WebServiceMessage message, Transformer transformer) throws TransformerException { ByteArrayOutputStream os = new ByteArrayOutputStream(); transformer.transform(message.getPayloadSource(), new StreamResult(os)); ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray()); transform(new StreamSource(is), message.getPayloadResult()); }
/** Returns the local part of the payload root element of the request. */ @Override protected String getLookupKeyForMessage(MessageContext messageContext) throws TransformerException { WebServiceMessage request = messageContext.getRequest(); QName rootQName = PayloadRootUtils.getPayloadRootQName(request.getPayloadSource(), transformerFactory); return rootQName.getLocalPart(); } }
@Override protected QName resolveQName(MessageContext messageContext) throws TransformerException { return PayloadRootUtils.getPayloadRootQName(messageContext.getRequest().getPayloadSource(), transformerFactory); } }
@Override public final void invoke(MessageContext messageContext) throws Exception { XMLStreamReader streamReader = getStreamReader(messageContext.getRequest().getPayloadSource()); XMLStreamWriter streamWriter = new ResponseCreatingStreamWriter(messageContext); invokeInternal(streamReader, streamWriter); streamWriter.close(); }
@Override public void invoke(MessageContext messageContext, Object endpoint) throws Exception { PayloadEndpoint payloadEndpoint = (PayloadEndpoint) endpoint; Source requestSource = messageContext.getRequest().getPayloadSource(); Source responseSource = payloadEndpoint.invoke(requestSource); if (responseSource != null) { WebServiceMessage response = messageContext.getResponse(); transform(responseSource, response.getPayloadResult()); } } }
@Override protected void invokeInternal(MessageContext messageContext, MethodEndpoint methodEndpoint) throws Exception { Source requestSource = messageContext.getRequest().getPayloadSource(); Object result = methodEndpoint.invoke(requestSource); if (result != null) { Source responseSource = (Source) result; WebServiceMessage response = messageContext.getResponse(); transform(responseSource, response.getPayloadResult()); } } }
@Override protected void invokeInternal(MessageContext messageContext, MethodEndpoint methodEndpoint) throws Exception { Element payloadElement = getRootElement(messageContext.getRequest().getPayloadSource()); Object[] args = getMethodArguments(payloadElement, methodEndpoint.getMethod()); Object result = methodEndpoint.invoke(args); if (result != null && result instanceof Source) { Source responseSource = (Source) result; WebServiceMessage response = messageContext.getResponse(); transform(responseSource, response.getPayloadResult()); } }