Author: rickette
Date: Sun May 29 22:14:20 2011
New Revision: 1128970

URL: http://svn.apache.org/viewvc?rev=1128970&view=rev
Log:
CAMEL-3974: Spring-WS producer now propagates headers. Thanks to Doug Douglass 
for providing a patch, I've polished it a bit.

Modified:
    
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java
    
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ProducerLocalRouteTest.java
    
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/ProducerLocalRouteTest-context.xml

Modified: 
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java?rev=1128970&r1=1128969&r2=1128970&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java
 (original)
+++ 
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java
 Sun May 29 22:14:20 2011
@@ -25,6 +25,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.ExchangeHelper;
 import org.springframework.ws.WebServiceMessage;
 import org.springframework.ws.client.core.SourceExtractor;
 import org.springframework.ws.client.core.WebServiceMessageCallback;
@@ -57,7 +58,10 @@ public class SpringWebserviceProducer ex
         } else {
             body = 
endpoint.getConfiguration().getWebServiceTemplate().sendSourceAndReceive(sourcePayload,
 callback, SOURCE_EXTRACTOR);
         }
-        exchange.getOut().setBody(body);
+        if (ExchangeHelper.isOutCapable(exchange)) {
+            exchange.getOut().copyFrom(exchange.getIn());
+            exchange.getOut().setBody(body);
+        }
     }
 
     protected class DefaultWebserviceMessageCallback implements 
WebServiceMessageCallback {

Modified: 
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ProducerLocalRouteTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ProducerLocalRouteTest.java?rev=1128970&r1=1128969&r2=1128970&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ProducerLocalRouteTest.java
 (original)
+++ 
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ProducerLocalRouteTest.java
 Sun May 29 22:14:20 2011
@@ -18,8 +18,10 @@ package org.apache.camel.component.sprin
 
 import javax.xml.transform.Source;
 
+import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.converter.jaxp.StringSource;
 import org.junit.Test;
 import org.springframework.test.context.ContextConfiguration;
@@ -37,6 +39,9 @@ public class ProducerLocalRouteTest exte
     @Produce
     private ProducerTemplate template;
 
+    @EndpointInject(uri = "mock:result")
+    private MockEndpoint resultEndpoint;
+
     @Test()
     public void consumeStockQuoteWebserviceWithDefaultTemplate() throws 
Exception {
         Object result = 
template.requestBody("direct:stockQuoteWebserviceWithDefaultTemplate", 
xmlRequestForGoogleStockQuote);
@@ -46,6 +51,16 @@ public class ProducerLocalRouteTest exte
     }
 
     @Test()
+    public void consumeStockQuoteWebserviceAndPreserveHeaders() throws 
Exception {
+        resultEndpoint.expectedHeaderReceived("helloHeader", "hello world!");
+
+        Object result = 
template.requestBodyAndHeader("direct:stockQuoteWebserviceMock", 
xmlRequestForGoogleStockQuote, "helloHeader", "hello world!");
+
+        assertNotNull(result);
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test()
     public void consumeStockQuoteWebservice() throws Exception {
         Object result = template.requestBody("direct:stockQuoteWebservice", 
xmlRequestForGoogleStockQuote);
 

Modified: 
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/ProducerLocalRouteTest-context.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/ProducerLocalRouteTest-context.xml?rev=1128970&r1=1128969&r2=1128970&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/ProducerLocalRouteTest-context.xml
 (original)
+++ 
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/ProducerLocalRouteTest-context.xml
 Sun May 29 22:14:20 2011
@@ -28,6 +28,13 @@
             <to 
uri="spring-ws:http://localhost?webServiceTemplate=#webServiceTemplate&amp;soapAction=http://www.stockquotes.edu/GetQuote"/>
         </route>
         <route>
+            <from uri="direct:stockQuoteWebserviceMock"/>
+            <pipeline>
+                <to 
uri="spring-ws:http://localhost?webServiceTemplate=#webServiceTemplate&amp;soapAction=http://www.stockquotes.edu/GetQuote"/>
+                <to uri="mock:result" />
+            </pipeline>
+        </route>
+        <route>
             <from uri="direct:stockQuoteWebserviceAsString"/>
             <to 
uri="spring-ws:http://localhost?webServiceTemplate=#webServiceTemplate&amp;soapAction=http://www.stockquotes.edu/GetQuote"/>
             <convertBodyTo type="java.lang.String"/>


Reply via email to