Author: ningjiang
Date: Thu Aug 19 03:36:14 2010
New Revision: 987007

URL: http://svn.apache.org/viewvc?rev=987007&view=rev
Log:
CAMEL-3057 CXFRS consumer should pass the protocol headers into camel message 
header

Modified:
    
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
    
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java

Modified: 
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java?rev=987007&r1=987006&r2=987007&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
 (original)
+++ 
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
 Thu Aug 19 03:36:14 2010
@@ -109,6 +109,9 @@ public class DefaultCxfRsBinding impleme
         
         copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.ACCEPT_CONTENT_TYPE, 
Exchange.ACCEPT_CONTENT_TYPE);
         
+        //copy the protocol header
+        copyProtocolHeader(cxfMessage, camelMessage, 
camelMessage.getExchange());
+        
         camelMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, 
method.getReturnType());
         
         
camelMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_GENERIC_TYPE, 
method.getGenericReturnType());
@@ -252,6 +255,22 @@ public class DefaultCxfRsBinding impleme
         }
     }
     
+    @SuppressWarnings("unchecked")
+    protected void copyProtocolHeader(org.apache.cxf.message.Message 
cxfMessage, Message camelMessage, Exchange camelExchange) {
+        Map<String, List<String>> headers = (Map<String, 
List<String>>)cxfMessage.get(org.apache.cxf.message.Message.PROTOCOL_HEADERS);
+        for (Map.Entry<String, List<String>>entry : headers.entrySet()) {
+            if (headerFilterStrategy.applyFilterToCamelHeaders(entry.getKey(), 
entry.getValue(), camelExchange)) {
+                if (LOG.isTraceEnabled()) {
+                    LOG.trace("Drop CXF message protocol header: " + 
entry.getKey() + "=" + entry.getValue());
+                }
+            } else {
+                // just put the first String element, as the complex one is 
filtered
+                camelMessage.setHeader(entry.getKey(), 
entry.getValue().get(0));
+            }
+            continue;
+        }
+    }
+    
     protected void 
copyOperationResourceInfoStack(org.apache.cxf.message.Message cxfMessage, 
Message camelMessage) {
         OperationResourceInfoStack stack = 
cxfMessage.get(OperationResourceInfoStack.class);
         if (stack != null) {

Modified: 
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java?rev=987007&r1=987006&r2=987007&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java
 (original)
+++ 
camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java
 Thu Aug 19 03:36:14 2010
@@ -74,6 +74,7 @@ public class CxfRsConsumerTest extends C
                             }
                         }
                         if ("updateCustomer".equals(operationName)) {
+                            assertEquals("Get a wrong customer message 
header", "header1;header2", inMessage.getHeader("test"));
                             String httpMethod = 
inMessage.getHeader(Exchange.HTTP_METHOD, String.class);
                             assertEquals("Get a wrong http method", "PUT", 
httpMethod);
                             Customer customer = 
inMessage.getBody(Customer.class);
@@ -117,6 +118,7 @@ public class CxfRsConsumerTest extends C
         HttpPut put = new 
HttpPut("http://localhost:9000/rest/customerservice/customers";);
         StringEntity entity = new StringEntity(PUT_REQUEST, "ISO-8859-1");
         entity.setContentType("text/xml; charset=ISO-8859-1");
+        put.addHeader("test", "header1;header2");
         put.setEntity(entity);
         HttpClient httpclient = new DefaultHttpClient();
 


Reply via email to