You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/02/25 18:53:48 UTC

[4/4] camel git commit: CAMEL-10888 - handling in exchange pattern

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 <on...@gmail.com>
Authored: Fri Feb 24 14:38:04 2017 +0300
Committer: Claus Ibsen <da...@apache.org>
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);
+        }
     }
 
 }