Repository: camel
Updated Branches:
  refs/heads/master c69feb066 -> c9a408b20


CAMEL-7557 Fixed the issue that CxfRsProducer does not copy headers between 
Camel and CXF messages in a proxy mode


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c9a408b2
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c9a408b2
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c9a408b2

Branch: refs/heads/master
Commit: c9a408b2098a4513c3c0616addf28ce2448244a1
Parents: c69feb0
Author: Willem Jiang <willem.ji...@gmail.com>
Authored: Fri Jul 4 16:41:14 2014 +0800
Committer: Willem Jiang <willem.ji...@gmail.com>
Committed: Fri Jul 4 16:58:52 2014 +0800

----------------------------------------------------------------------
 .../component/cxf/jaxrs/CxfRsProducer.java      | 56 ++++++++++++--------
 .../component/cxf/jaxrs/CxfRsProducerTest.java  |  2 +
 .../component/cxf/jaxrs/CxfRsSpringProducer.xml |  3 +-
 3 files changed, 38 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/c9a408b2/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java
 
b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java
index 729417b..af5e0bd 100644
--- 
a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java
+++ 
b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java
@@ -90,8 +90,36 @@ public class CxfRsProducer extends DefaultProducer {
             invokeProxyClient(exchange);
         }
     }
-
+    
     @SuppressWarnings("unchecked")
+    protected void setupClientQueryAndHeaders(Client client, Exchange 
exchange) throws Exception {
+        Message inMessage = exchange.getIn();
+        CxfRsEndpoint cxfRsEndpoint = (CxfRsEndpoint) getEndpoint();
+        // check if there is a query map in the message header
+        Map<String, String> maps = 
inMessage.getHeader(CxfConstants.CAMEL_CXF_RS_QUERY_MAP, Map.class);
+        if (maps == null) {
+            // Get the map from HTTP_QUERY header
+            String queryString = inMessage.getHeader(Exchange.HTTP_QUERY, 
String.class);
+            if (queryString != null) {
+                maps = getQueryParametersFromQueryString(queryString,
+                                                         
IOHelper.getCharsetName(exchange));
+            }
+        }
+        if (maps == null) {
+            maps = cxfRsEndpoint.getParameters();
+        }
+        if (maps != null) {
+            for (Map.Entry<String, String> entry : maps.entrySet()) {
+                client.query(entry.getKey(), entry.getValue());
+            }
+        }
+        
+        CxfRsBinding binding = cxfRsEndpoint.getBinding();
+        // set headers
+        
client.headers(binding.bindCamelHeadersToRequestHeaders(inMessage.getHeaders(), 
exchange));
+        
+    }
+
     protected void invokeHttpClient(Exchange exchange) throws Exception {
         Message inMessage = exchange.getIn();
         JAXRSClientFactoryBean cfb = 
clientFactoryBeanCache.get(CxfEndpointUtils
@@ -119,24 +147,6 @@ public class CxfRsProducer extends DefaultProducer {
         }
 
         CxfRsEndpoint cxfRsEndpoint = (CxfRsEndpoint) getEndpoint();
-        // check if there is a query map in the message header
-        Map<String, String> maps = 
inMessage.getHeader(CxfConstants.CAMEL_CXF_RS_QUERY_MAP, Map.class);
-        if (maps == null) {
-            // Get the map from HTTP_QUERY header
-            String queryString = inMessage.getHeader(Exchange.HTTP_QUERY, 
String.class);
-            if (queryString != null) {
-                maps = getQueryParametersFromQueryString(queryString,
-                                                         
IOHelper.getCharsetName(exchange));
-            }
-        }
-        if (maps == null) {
-            maps = cxfRsEndpoint.getParameters();
-        }
-        if (maps != null) {
-            for (Map.Entry<String, String> entry : maps.entrySet()) {
-                client.query(entry.getKey(), entry.getValue());
-            }
-        }
 
         CxfRsBinding binding = cxfRsEndpoint.getBinding();
 
@@ -150,9 +160,8 @@ public class CxfRsProducer extends DefaultProducer {
             }
         }
 
-        // set headers
-        
client.headers(binding.bindCamelHeadersToRequestHeaders(inMessage.getHeaders(), 
exchange));
-
+        setupClientQueryAndHeaders(client, exchange);
+        
         // invoke the client
         Object response = null;
         if (responseClass == null || Response.class.equals(responseClass)) {
@@ -210,6 +219,9 @@ public class CxfRsProducer extends DefaultProducer {
         } else {
             target = cfb.createWithValues(varValues);
         }
+        
+        setupClientQueryAndHeaders(target, exchange);
+        
         // find out the method which we want to invoke
         JAXRSServiceFactoryBean sfb = cfb.getServiceFactory();
         sfb.getResourceClasses();

http://git-wip-us.apache.org/repos/asf/camel/blob/c9a408b2/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java
 
b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java
index 0eeb742..af255e9 100644
--- 
a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java
+++ 
b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java
@@ -88,6 +88,8 @@ public class CxfRsProducerTest extends CamelSpringTestSupport 
{
                 inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, 
Boolean.FALSE);
                 // set a customer header
                 inMessage.setHeader("key", "value");
+                // setup the accept content type
+                inMessage.setHeader(Exchange.ACCEPT_CONTENT_TYPE, 
"application/json");
                 // set the parameters , if you just have one parameter 
                 // camel will put this object into an Object[] itself
                 inMessage.setBody("123");

http://git-wip-us.apache.org/repos/asf/camel/blob/c9a408b2/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducer.xml
----------------------------------------------------------------------
diff --git 
a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducer.xml
 
b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducer.xml
index 6f8add8..34d073b 100644
--- 
a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducer.xml
+++ 
b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducer.xml
@@ -40,7 +40,8 @@
   <bean id="customerService" 
class="org.apache.camel.component.cxf.jaxrs.testbean.CustomerService" />
 
   <cxf:rsClient id="rsClientProxy" 
address="http://localhost:${CXFTestSupport.port1}/CxfRsProducerTest/";
-    
serviceClass="org.apache.camel.component.cxf.jaxrs.testbean.CustomerService"/>
+    
serviceClass="org.apache.camel.component.cxf.jaxrs.testbean.CustomerService"
+    loggingFeatureEnabled="true" />
    
   <cxf:rsClient id="rsClientHttp" 
address="http://localhost:${CXFTestSupport.port1}/CxfRsProducerTest/"/>
 

Reply via email to