Repository: camel
Updated Branches:
  refs/heads/master 8b306d0ef -> 84c613227


CAMEL-7436 Copy CXF Http header into Camel message header


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

Branch: refs/heads/master
Commit: 84c61322733c1cfc16f6b7e9b431c65099d8704e
Parents: 4ede10a
Author: Willem Jiang <willem.ji...@gmail.com>
Authored: Tue May 13 20:27:16 2014 +0800
Committer: Willem Jiang <willem.ji...@gmail.com>
Committed: Tue May 13 20:29:57 2014 +0800

----------------------------------------------------------------------
 .../camel/component/cxf/DefaultCxfBinding.java  |  4 +++
 .../cxf/jaxrs/DefaultCxfRsBinding.java          | 24 ++------------
 .../camel/component/cxf/util/CxfUtils.java      | 35 ++++++++++++++++++++
 .../camel/component/cxf/CxfConsumerTest.java    |  6 +++-
 4 files changed, 46 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/84c61322/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
----------------------------------------------------------------------
diff --git 
a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
 
b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
index 3bd67e0..270937d 100644
--- 
a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
+++ 
b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
@@ -45,6 +45,7 @@ import org.w3c.dom.Node;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.component.cxf.common.message.CxfConstants;
+import org.apache.camel.component.cxf.util.CxfUtils;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.spi.HeaderFilterStrategyAware;
 import org.apache.camel.util.ExchangeHelper;
@@ -496,6 +497,9 @@ public class DefaultCxfBinding implements CxfBinding, 
HeaderFilterStrategyAware
         Map<String, Object> camelHeaders = camelMessage.getHeaders();
         camelHeaders.put(CxfConstants.CAMEL_CXF_MESSAGE, cxfMessage);
         
+        // Copy the http header to CAMEL as we do in camel-cxfrs
+        CxfUtils.copyHttpHeadersFromCxfToCamel(cxfMessage, camelMessage);
+        
         if (cxfHeaders != null) {
             for (Map.Entry<String, List<String>> entry : 
cxfHeaders.entrySet()) {
                 if 
(!headerFilterStrategy.applyFilterToExternalHeaders(entry.getKey(), 

http://git-wip-us.apache.org/repos/asf/camel/blob/84c61322/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
----------------------------------------------------------------------
diff --git 
a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
 
b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
index 6703af8..0a08471 100644
--- 
a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
+++ 
b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
@@ -28,6 +28,7 @@ import javax.ws.rs.core.Response;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.component.cxf.common.message.CxfConstants;
+import org.apache.camel.component.cxf.util.CxfUtils;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.spi.HeaderFilterStrategyAware;
 import org.apache.cxf.jaxrs.impl.MetadataMap;
@@ -101,28 +102,7 @@ public class DefaultCxfRsBinding implements CxfRsBinding, 
HeaderFilterStrategyAw
         org.apache.cxf.message.Message cxfMessage = cxfExchange.getInMessage();
         
         // TODO use header filter strategy and cxfToCamelHeaderMap
-        
-        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.REQUEST_URI, Exchange.HTTP_URI);
-       
-        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.HTTP_REQUEST_METHOD, Exchange.HTTP_METHOD);
-        
-        // We need remove the BASE_PATH from the PATH_INFO
-        String pathInfo = 
(String)cxfMessage.get(org.apache.cxf.message.Message.PATH_INFO);
-        String basePath = 
(String)cxfMessage.get(org.apache.cxf.message.Message.BASE_PATH);
-        if (pathInfo != null && basePath != null && 
pathInfo.startsWith(basePath)) {
-            pathInfo = pathInfo.substring(basePath.length());
-        }
-        if (pathInfo != null) {
-            camelMessage.setHeader(Exchange.HTTP_PATH, pathInfo);
-        }
-        
-        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.CONTENT_TYPE, Exchange.CONTENT_TYPE);
-        
-        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.ENCODING, Exchange.HTTP_CHARACTER_ENCODING);
-        
-        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.QUERY_STRING, Exchange.HTTP_QUERY);
-        
-        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.ACCEPT_CONTENT_TYPE, 
Exchange.ACCEPT_CONTENT_TYPE);
+        CxfUtils.copyHttpHeadersFromCxfToCamel(cxfMessage, camelMessage);
         
         //copy the protocol header
         copyProtocolHeader(cxfMessage, camelMessage, 
camelMessage.getExchange());

http://git-wip-us.apache.org/repos/asf/camel/blob/84c61322/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/CxfUtils.java
----------------------------------------------------------------------
diff --git 
a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/CxfUtils.java
 
b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/CxfUtils.java
index 362120a..27edb54 100644
--- 
a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/CxfUtils.java
+++ 
b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/CxfUtils.java
@@ -29,6 +29,8 @@ import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.apache.camel.converter.jaxp.XmlConverter;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.helpers.IOUtils;
@@ -60,6 +62,38 @@ public final class CxfUtils {
         return converter.toString(converter.toDOMSource(writer.getDocument()), 
null);
     }
     
+    public static void 
copyHttpHeadersFromCxfToCamel(org.apache.cxf.message.Message cxfMessage,
+                                                     org.apache.camel.Message 
camelMessage) {
+        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.REQUEST_URI, Exchange.HTTP_URI);
+        
+        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.HTTP_REQUEST_METHOD, Exchange.HTTP_METHOD);
+        
+        // We need remove the BASE_PATH from the PATH_INFO
+        String pathInfo = 
(String)cxfMessage.get(org.apache.cxf.message.Message.PATH_INFO);
+        String basePath = 
(String)cxfMessage.get(org.apache.cxf.message.Message.BASE_PATH);
+        if (pathInfo != null && basePath != null && 
pathInfo.startsWith(basePath)) {
+            pathInfo = pathInfo.substring(basePath.length());
+        }
+        if (pathInfo != null) {
+            camelMessage.setHeader(Exchange.HTTP_PATH, pathInfo);
+        }
+        
+        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.CONTENT_TYPE, Exchange.CONTENT_TYPE);
+        
+        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.ENCODING, Exchange.HTTP_CHARACTER_ENCODING);
+        
+        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.QUERY_STRING, Exchange.HTTP_QUERY);
+        
+        copyMessageHeader(cxfMessage, camelMessage, 
org.apache.cxf.message.Message.ACCEPT_CONTENT_TYPE, 
Exchange.ACCEPT_CONTENT_TYPE);
+        
+    }
+    
+    private static void copyMessageHeader(org.apache.cxf.message.Message 
cxfMessage, Message camelMessage, String cxfKey, String camelKey) {
+        if (cxfMessage.get(cxfKey) != null) {
+            camelMessage.setHeader(camelKey, cxfMessage.get(cxfKey));
+        }
+    }
+    
     private static void writeElement(Element e,
                                     XMLStreamWriter writer,                    
                
                                     Map<String, String> namespaces)
@@ -170,5 +204,6 @@ public final class CxfUtils {
             }
         }
     }
+    
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/84c61322/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerTest.java
 
b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerTest.java
index 520c67f..9a81596 100644
--- 
a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerTest.java
+++ 
b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerTest.java
@@ -70,6 +70,10 @@ public class CxfConsumerTest extends CamelTestSupport {
                         ServletRequest request = 
(ServletRequest)cxfMessage.get("HTTP.REQUEST");
                         assertNotNull("Should get the ServletRequest", 
request);
                         assertNotNull("Should get the RemoteAddress", 
request.getRemoteAddr());
+                        // Could verify the HttpRequest 
+                        String contentType = 
in.getHeader(Exchange.CONTENT_TYPE, String.class);
+                        assertNotNull("Should get the contentType.", 
contentType);
+                        
                         // Get the parameter list
                         List<?> parameter = in.getBody(List.class);
                         // Get the operation name
@@ -118,7 +122,7 @@ public class CxfConsumerTest extends CamelTestSupport {
     
     @Test
     public void testXmlDeclaration() throws Exception {
-        String response = template.requestBody(SIMPLE_ENDPOINT_ADDRESS, 
ECHO_REQUEST, String.class);
+        String response = 
template.requestBodyAndHeader(SIMPLE_ENDPOINT_ADDRESS, ECHO_REQUEST, 
Exchange.CONTENT_TYPE, "text/xml; charset=UTF-8", String.class);
         assertTrue("Can't find the xml declaration.", 
response.startsWith("<?xml version='1.0' encoding="));
     }
     

Reply via email to