CAMEL-10888 - handling in exchange pattern
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/81b2e6ab Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/81b2e6ab Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/81b2e6ab Branch: refs/heads/master Commit: 81b2e6abb5075ab5601473f3ed0528c876d33d14 Parents: 024b636 Author: onders86 <[email protected]> Authored: Fri Feb 24 14:38:04 2017 +0300 Committer: Claus Ibsen <[email protected]> Committed: Sat Feb 25 19:49:25 2017 +0100 ---------------------------------------------------------------------- .../spring/ws/SpringWebserviceConsumer.java | 22 ++++++---- .../spring/ws/ConsumerMarshallingRouteTest.java | 45 ++++++++++++++++++++ .../spring/ws/StockQuoteResponseProcessor.java | 6 ++- 3 files changed, 63 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/81b2e6ab/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java index 3acd9b2..5d3ebac 100644 --- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java +++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java @@ -57,21 +57,25 @@ public class SpringWebserviceConsumer extends DefaultConsumer implements Message // start message processing getProcessor().process(exchange); - + Message responseMessage = null; + Source responseBody = null; if (exchange.getException() != null) { throw exchange.getException(); } else if (exchange.getPattern().isOutCapable()) { - Message responseMessage = exchange.getOut(Message.class); - if (responseMessage != null) { - Source responseBody = responseMessage.getBody(Source.class); - WebServiceMessage response = messageContext.getResponse(); + responseMessage = exchange.getOut(Message.class); + } else { + responseMessage = exchange.getIn(Message.class); + } + if (responseMessage != null) { + responseBody = responseMessage.getBody(Source.class); + WebServiceMessage response = messageContext.getResponse(); - configuration.getMessageFilter().filterConsumer(exchange, response); + configuration.getMessageFilter().filterConsumer(exchange, response); - XmlConverter xmlConverter = configuration.getXmlConverter(); - xmlConverter.toResult(responseBody, response.getPayloadResult()); - } + XmlConverter xmlConverter = configuration.getXmlConverter(); + xmlConverter.toResult(responseBody, response.getPayloadResult()); } + } private void populateExchangeFromMessageContext(MessageContext messageContext, Exchange exchange) { http://git-wip-us.apache.org/repos/asf/camel/blob/81b2e6ab/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerMarshallingRouteTest.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerMarshallingRouteTest.java b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerMarshallingRouteTest.java index 4bdde73..0413b73 100644 --- a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerMarshallingRouteTest.java +++ b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerMarshallingRouteTest.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.spring.ws; +import org.apache.camel.ExchangePattern; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.spring.ws.bean.CamelEndpointMapping; import org.apache.camel.component.spring.ws.jaxb.QuoteRequest; @@ -79,6 +80,32 @@ public class ConsumerMarshallingRouteTest extends CamelTestSupport { QuoteResponse quoteResponse = (QuoteResponse) result; assertEquals("Google Inc.", quoteResponse.getName()); } + + @Test + public void consumeWebserviceWithPojoRequestAsInOnly() throws Exception { + QuoteRequest request = new QuoteRequest(); + request.setSymbol("GOOG"); + + Object result = template.requestBody("direct:webservice-marshall-asinonly", request); + + assertNotNull(result); + assertTrue(result instanceof String); + String resultMessage = (String) result; + assertTrue(resultMessage.contains("Google Inc.")); + } + + @Test + public void consumeWebserviceWithPojoRequestAndPojoResponseAsInOnly() throws Exception { + QuoteRequest request = new QuoteRequest(); + request.setSymbol("GOOG"); + + Object result = template.requestBody("direct:webservice-marshall-unmarshall-asinonly", request); + + assertNotNull(result); + assertTrue(result instanceof QuoteResponse); + QuoteResponse quoteResponse = (QuoteResponse) result; + assertEquals("Google Inc.", quoteResponse.getName()); + } @Override protected RouteBuilder createRouteBuilder() throws Exception { @@ -104,6 +131,24 @@ public class ConsumerMarshallingRouteTest extends CamelTestSupport { // provide web service from("spring-ws:soapaction:http://www.stockquotes.edu/GetQuote?endpointMapping=#endpointMapping").process( new StockQuoteResponseProcessor()); + + // request webservice + from("direct:webservice-marshall-asinonly") + .marshal(jaxb) + .to("spring-ws:http://localhost/?soapAction=http://www.stockquotes.edu/GetQuoteAsInOnly&webServiceTemplate=#webServiceTemplate") + .convertBodyTo(String.class); + + // request webservice + from("direct:webservice-marshall-unmarshall-asinonly") + .marshal(jaxb) + .to("spring-ws:http://localhost/?soapAction=http://www.stockquotes.edu/GetQuoteAsInOnly&webServiceTemplate=#webServiceTemplate") + .unmarshal(jaxb); + + // provide web service + from("spring-ws:soapaction:http://www.stockquotes.edu/GetQuoteAsInOnly?endpointMapping=#endpointMapping").setExchangePattern(ExchangePattern.InOnly).process( + new StockQuoteResponseProcessor()); + + } }; } http://git-wip-us.apache.org/repos/asf/camel/blob/81b2e6ab/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/StockQuoteResponseProcessor.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/StockQuoteResponseProcessor.java b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/StockQuoteResponseProcessor.java index d190beb..011160d 100644 --- a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/StockQuoteResponseProcessor.java +++ b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/StockQuoteResponseProcessor.java @@ -40,7 +40,11 @@ public class StockQuoteResponseProcessor implements Processor { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(is); - exchange.getOut().setBody(doc); + if (exchange.getPattern().isOutCapable()) { + exchange.getOut().setBody(doc); + } else { + exchange.getIn().setBody(doc); + } } }
