Author: ningjiang
Date: Thu Mar  7 13:02:56 2013
New Revision: 1453839

URL: http://svn.apache.org/r1453839
Log:
CAMEL-6136 Fix the issue that  In message headers not preserved for 
camel-xmlrpc producer in Async mode.

Modified:
    
camel/trunk/components/camel-xmlrpc/src/main/java/org/apache/camel/component/xmlrpc/XmlRpcAsyncCallback.java
    
camel/trunk/components/camel-xmlrpc/src/test/java/org/apache/camel/component/xmlrpc/XmlRpcComponentTest.java

Modified: 
camel/trunk/components/camel-xmlrpc/src/main/java/org/apache/camel/component/xmlrpc/XmlRpcAsyncCallback.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-xmlrpc/src/main/java/org/apache/camel/component/xmlrpc/XmlRpcAsyncCallback.java?rev=1453839&r1=1453838&r2=1453839&view=diff
==============================================================================
--- 
camel/trunk/components/camel-xmlrpc/src/main/java/org/apache/camel/component/xmlrpc/XmlRpcAsyncCallback.java
 (original)
+++ 
camel/trunk/components/camel-xmlrpc/src/main/java/org/apache/camel/component/xmlrpc/XmlRpcAsyncCallback.java
 Thu Mar  7 13:02:56 2013
@@ -41,6 +41,7 @@ public class XmlRpcAsyncCallback impleme
     @Override
     public void handleResult(XmlRpcRequest pRequest, Object pResult) {
         LOG.trace("Get the response {}", pResult);
+        camelExchange.getOut().setHeaders(camelExchange.getIn().getHeaders());
         camelExchange.getOut().setBody(pResult);
         camelAsyncCallback.done(false);
     }

Modified: 
camel/trunk/components/camel-xmlrpc/src/test/java/org/apache/camel/component/xmlrpc/XmlRpcComponentTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-xmlrpc/src/test/java/org/apache/camel/component/xmlrpc/XmlRpcComponentTest.java?rev=1453839&r1=1453838&r2=1453839&view=diff
==============================================================================
--- 
camel/trunk/components/camel-xmlrpc/src/test/java/org/apache/camel/component/xmlrpc/XmlRpcComponentTest.java
 (original)
+++ 
camel/trunk/components/camel-xmlrpc/src/test/java/org/apache/camel/component/xmlrpc/XmlRpcComponentTest.java
 Thu Mar  7 13:02:56 2013
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.xmlrpc;
 
+import java.util.HashMap;
+
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -57,6 +59,33 @@ public class XmlRpcComponentTest extends
         invokeServiceFaultResponse("xmlrpc:http://localhost:"; + port + 
"/xmlrpc/fault?synchronous=true");
     }
     
+    @Test
+    public void verifyHeadersPreservedSync() throws Exception {
+        verifyHeadersPreserved("direct:sync");
+    }
+
+    @Test
+    public void verifyHeadersPreservedAsync() throws Exception {
+        verifyHeadersPreserved("direct:async");
+    }
+
+    @SuppressWarnings("serial")
+    private void verifyHeadersPreserved(String uri) throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.reset();
+        mock.expectedMessageCount(1);
+        mock.expectedHeaderReceived("UserHeader", "test-header-value");
+        template.requestBodyAndHeaders(uri, new Object[] {"me"},
+                new HashMap<String, Object>() {
+                    {
+                        put(XmlRpcConstants.METHOD_NAME, "hello");
+                        put("UserHeader", "test-header-value");
+                    }
+                });
+
+        assertMockEndpointsSatisfied();
+    }
+    
     private void invokeService(String uri) throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.reset();


Reply via email to