You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/11/05 12:09:59 UTC

[2/2] camel git commit: CAMEL-10429 - CXFRS client requires Exchange.HTTP_URI instead of HTTP_PATH for Camel tranport

CAMEL-10429 - CXFRS client requires Exchange.HTTP_URI instead of HTTP_PATH for Camel tranport


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

Branch: refs/heads/camel-2.18.x
Commit: c69e59a3bb02a287d24a23783203bf5a0effd0d5
Parents: 3893465
Author: Tadayoshi Sato <sa...@gmail.com>
Authored: Sat Nov 5 16:49:01 2016 +0900
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Nov 5 13:09:47 2016 +0100

----------------------------------------------------------------------
 .../cxf/common/header/CxfHeaderHelper.java      | 117 ++++++++++++-------
 .../cxf/transport/CamelDestination.java         |   2 +-
 .../cxf/transport/CamelOutputStream.java        |   4 +-
 .../cxf/common/header/CxfHeaderHelperTest.java  |  10 +-
 .../common/message/CxfMessageHelperTest.java    | 115 ++++++++++++++++++
 .../cxf/common/message/RequestBody.xml          |   1 +
 .../camel/component/cxf/DefaultCxfBinding.java  |   4 +-
 .../cxf/jaxrs/DefaultCxfRsBinding.java          |  10 +-
 .../camel/component/cxf/util/CxfUtils.java      |  34 ------
 .../cxf/util/CxfMessageHelperTest.java          | 116 ------------------
 .../cxf/transport/CxfRsCamelTransport.xml       |   5 -
 .../camel/component/cxf/util/RequestBody.xml    |   1 -
 12 files changed, 201 insertions(+), 218 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelper.java b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelper.java
index f5099ab..a72e2a8 100644
--- a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelper.java
+++ b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelper.java
@@ -88,71 +88,100 @@ public final class CxfHeaderHelper {
         }
     }
 
-    public static void propagateCxfToCamel(HeaderFilterStrategy strategy,
-            Message message, Map<String, Object> headers, Exchange exchange) {
+    /**
+     * Propagates CXF headers to Camel message.
+     *
+     * @param strategy header filter strategy
+     * @param cxfMessage CXF message
+     * @param camelMessage Camel message
+     * @param exchange provides context for filtering
+     */
+    public static void propagateCxfToCamel(HeaderFilterStrategy strategy, Message cxfMessage,
+            org.apache.camel.Message camelMessage, Exchange exchange) {
 
         if (strategy == null) {
             return;
         }
 
+        // Copy the CXF HTTP headers to the camel headers
+        copyHttpHeadersFromCxfToCamel(strategy, cxfMessage, camelMessage, exchange);
+
         // Copy the CXF protocol headers to the camel headers
         Map<String, List<String>> cxfHeaders =
-            CastUtils.cast((Map<?, ?>)message.get(Message.PROTOCOL_HEADERS));
+            CastUtils.cast((Map<?, ?>) cxfMessage.get(Message.PROTOCOL_HEADERS));
         if (cxfHeaders != null) {
             for (Map.Entry<String, List<String>> entry : cxfHeaders.entrySet()) {
                 if (!strategy.applyFilterToExternalHeaders(entry.getKey(), entry.getValue(), exchange)) {
                     List<String> values = entry.getValue();
-                    //headers.put(entry.getKey(), entry.getValue().get(0));
-                    Object evalue;
-                    if (values.size() > 1) {
-                        if (exchange.getProperty(CxfConstants.CAMEL_CXF_PROTOCOL_HEADERS_MERGED, Boolean.FALSE, Boolean.class)) {
-                            StringBuilder sb = new StringBuilder();
-                            for (Iterator<String> it = values.iterator(); it.hasNext();) {
-                                sb.append(it.next());
-                                if (it.hasNext()) {
-                                    sb.append(',').append(' ');
-                                }
-                            }
-                            evalue = sb.toString();
-                        } else {
-                            evalue = values;
-                        }
-                    } else {
-                        evalue = values.get(0);
-                    }
-                    headers.put(entry.getKey(), evalue);
+                    camelMessage.setHeader(entry.getKey(), protocolHeaderValuesToSingleValue(values, exchange));
                 }
             }
         }
 
-        // propagate content type with the encoding information
-        // We need to do it as the CXF does this kind of thing in transport level
-        String key = Message.CONTENT_TYPE;
-        Object value = determineContentType(message);
+        // propagate request context
+        copyMessageHeader(strategy, exchange, cxfMessage, camelMessage, Client.REQUEST_CONTEXT);
+
+        // propagate response context
+        copyMessageHeader(strategy, exchange, cxfMessage, camelMessage, Client.RESPONSE_CONTEXT);
         
-        if (value != null && !strategy.applyFilterToExternalHeaders(key, value, exchange)) {
-            headers.put(Exchange.CONTENT_TYPE, value);
+        // propagate response code
+        copyMessageHeader(strategy, exchange, cxfMessage, camelMessage, Message.RESPONSE_CODE, Exchange.HTTP_RESPONSE_CODE);
+    }
+
+    private static Object protocolHeaderValuesToSingleValue(List<String> values, Exchange exchange) {
+        if (values.size() < 2) {
+            return values.get(0);
         }
+        if (!exchange.getProperty(CxfConstants.CAMEL_CXF_PROTOCOL_HEADERS_MERGED, Boolean.FALSE, Boolean.class)) {
+            return values;
+        }
+        StringBuilder sb = new StringBuilder();
+        Iterator<String> it = values.iterator();
+        while (it.hasNext()) {
+            sb.append(it.next());
+            if (it.hasNext()) {
+                sb.append(',').append(' ');
+            }
+        }
+        return sb.toString();
+    }
 
-        // propagate request context
-        key = Client.REQUEST_CONTEXT;
-        value = message.get(key);
-        if (value != null && !strategy.applyFilterToExternalHeaders(key, value, exchange)) {
-            headers.put(key, value);
+    public static void copyHttpHeadersFromCxfToCamel(HeaderFilterStrategy strategy, Message cxfMessage,
+            org.apache.camel.Message camelMessage, Exchange exchange) {
+        copyMessageHeader(strategy, exchange, cxfMessage, camelMessage, Message.REQUEST_URI, Exchange.HTTP_URI);
+        copyMessageHeader(strategy, exchange, cxfMessage, camelMessage, Message.HTTP_REQUEST_METHOD, Exchange.HTTP_METHOD);
+
+        // We need remove the BASE_PATH from the PATH_INFO
+        String pathInfo = (String) cxfMessage.get(Message.PATH_INFO);
+        String basePath = (String) cxfMessage.get(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);
         }
 
-        // propagate response context
-        key = Client.RESPONSE_CONTEXT;
-        value = message.get(key);
-        if (value != null && !strategy.applyFilterToExternalHeaders(key, value, exchange)) {
-            headers.put(key, value);
+        copyMessageHeader(strategy, exchange, cxfMessage, camelMessage, Message.CONTENT_TYPE, Exchange.CONTENT_TYPE);
+        copyMessageHeader(strategy, exchange, cxfMessage, camelMessage, Message.ENCODING, Exchange.HTTP_CHARACTER_ENCODING);
+        copyMessageHeader(strategy, exchange, cxfMessage, camelMessage, Message.QUERY_STRING, Exchange.HTTP_QUERY);
+        copyMessageHeader(strategy, exchange, cxfMessage, camelMessage, Message.ACCEPT_CONTENT_TYPE, Exchange.ACCEPT_CONTENT_TYPE);
+    }
+
+    private static void copyMessageHeader(HeaderFilterStrategy strategy, Exchange exchange,
+            Message cxfMessage, org.apache.camel.Message camelMessage, String key) {
+        copyMessageHeader(strategy, exchange, cxfMessage, camelMessage, key, key);
+    }
+
+    private static void copyMessageHeader(HeaderFilterStrategy strategy, Exchange exchange,
+            Message cxfMessage, org.apache.camel.Message camelMessage, String cxfKey, String camelKey) {
+        Object value = cxfMessage.get(cxfKey);
+        if (Message.CONTENT_TYPE.equals(cxfKey)) {
+            // propagate content type with the encoding information
+            // We need to do it as the CXF does this kind of thing in transport level
+            value = determineContentType(cxfMessage);
         }
-        
-        // propagate response code
-        key = Message.RESPONSE_CODE;
-        value = message.get(key);
-        if (value != null && !strategy.applyFilterToExternalHeaders(key, value, exchange)) {
-            headers.put(Exchange.HTTP_RESPONSE_CODE, value);
+        if (value != null && !strategy.applyFilterToExternalHeaders(cxfKey, value, exchange)) {
+            camelMessage.setHeader(camelKey, value);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java
index 16a3e5b..007d994 100644
--- a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java
+++ b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java
@@ -253,7 +253,7 @@ public class CamelDestination extends AbstractDestination implements Configurabl
         // copy the camel in message header to the out message
         camelExchange.getOut().getHeaders().putAll(camelExchange.getIn().getHeaders());
         CxfHeaderHelper.propagateCxfToCamel(headerFilterStrategy, outMessage,
-                                            camelExchange.getOut().getHeaders(), camelExchange);
+                                            camelExchange.getOut(), camelExchange);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelOutputStream.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelOutputStream.java b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelOutputStream.java
index 06ffcb8..68d88ca 100644
--- a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelOutputStream.java
+++ b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelOutputStream.java
@@ -89,7 +89,7 @@ class CamelOutputStream extends CachedOutputStream {
         exchange.setProperty(Exchange.TO_ENDPOINT, this.targetCamelEndpointUri);
         CachedOutputStream outputStream = (CachedOutputStream) outMessage.getContent(OutputStream.class);
         // Send out the request message here, copy the protocolHeader back
-        CxfHeaderHelper.propagateCxfToCamel(this.headerFilterStrategy, outMessage, exchange.getIn().getHeaders(), exchange);
+        CxfHeaderHelper.propagateCxfToCamel(this.headerFilterStrategy, outMessage, exchange.getIn(), exchange);
 
         // TODO support different encoding
         exchange.getIn().setBody(outputStream.getInputStream());
@@ -173,4 +173,4 @@ class CamelOutputStream extends CachedOutputStream {
     }
     
     
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelperTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelperTest.java b/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelperTest.java
index 5c84f6b..9d80955 100755
--- a/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelperTest.java
+++ b/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelperTest.java
@@ -82,11 +82,11 @@ public class CxfHeaderHelperTest extends Assert {
         cxfHeaders.put("mybrewheader", Arrays.asList("cappuccino", "espresso"));
         cxfMessage.put(org.apache.cxf.message.Message.PROTOCOL_HEADERS, cxfHeaders);
         cxfMessage.put(Message.RESPONSE_CODE, "200");
-        
-        Map<String, Object> camelHeaders = exchange.getIn().getHeaders();
+
         CxfHeaderHelper.propagateCxfToCamel(new DefaultHeaderFilterStrategy(), 
-                                            cxfMessage, camelHeaders, exchange);
+                                            cxfMessage, exchange.getIn(), exchange);
 
+        Map<String, Object> camelHeaders = exchange.getIn().getHeaders();
         assertEquals("urn:hello:world", camelHeaders.get("soapaction"));
         assertEquals("urn:hello:world", camelHeaders.get("SoapAction"));
         assertEquals("241", camelHeaders.get("content-length"));
@@ -106,10 +106,10 @@ public class CxfHeaderHelperTest extends Assert {
         cxfHeaders.put("mybrewheader", Arrays.asList("cappuccino", "espresso"));
         cxfMessage.put(org.apache.cxf.message.Message.PROTOCOL_HEADERS, cxfHeaders);
 
-        Map<String, Object> camelHeaders = exchange.getIn().getHeaders();
         CxfHeaderHelper.propagateCxfToCamel(new DefaultHeaderFilterStrategy(), 
-                                            cxfMessage, camelHeaders, exchange);
+                                            cxfMessage, exchange.getIn(), exchange);
 
+        Map<String, Object> camelHeaders = exchange.getIn().getHeaders();
         assertEquals("peach", camelHeaders.get("MyFruitHeader"));
         assertEquals("cappuccino, espresso", camelHeaders.get("MyBrewHeader"));
     } 

http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/message/CxfMessageHelperTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/message/CxfMessageHelperTest.java b/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/message/CxfMessageHelperTest.java
new file mode 100644
index 0000000..c9ff43c
--- /dev/null
+++ b/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/common/message/CxfMessageHelperTest.java
@@ -0,0 +1,115 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cxf.common.message;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.dom.DOMSource;
+
+import org.apache.camel.component.cxf.common.header.CxfHeaderFilterStrategy;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.DefaultExchange;
+import org.apache.camel.spi.HeaderFilterStrategy;
+import org.apache.camel.util.IOHelper;
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.io.CachedOutputStream;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.staxutils.StaxUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CxfMessageHelperTest extends Assert {
+    private static final String REQUEST_STRING =
+        "<testMethod xmlns=\"http://camel.apache.org/testService\"/>";
+    private DefaultCamelContext context = new DefaultCamelContext();
+
+    
+    // setup the default context for testing
+    @Test
+    public void testGetCxfInMessage() throws Exception {
+        HeaderFilterStrategy headerFilterStrategy = new CxfHeaderFilterStrategy();
+        org.apache.camel.Exchange exchange = new DefaultExchange(context);
+        // String
+        exchange.getIn().setBody("hello world");
+        org.apache.cxf.message.Message message = CxfMessageHelper.getCxfInMessage(
+                headerFilterStrategy, exchange, false);
+        // test message
+        InputStream is = message.getContent(InputStream.class);
+        assertNotNull("The input stream should not be null", is);
+        assertEquals("Don't get the right message", toString(is), "hello world");
+
+        // DOMSource
+        URL request = this.getClass().getResource("RequestBody.xml");
+        File requestFile = new File(request.toURI());
+        FileInputStream inputStream = new FileInputStream(requestFile);
+        XMLStreamReader xmlReader = StaxUtils.createXMLStreamReader(inputStream);
+        DOMSource source = new DOMSource(StaxUtils.read(xmlReader));
+        exchange.getIn().setBody(source);
+        message = CxfMessageHelper.getCxfInMessage(headerFilterStrategy, exchange, false);
+        is = message.getContent(InputStream.class);
+        assertNotNull("The input stream should not be null", is);
+        assertEquals("Don't get the right message", toString(is), REQUEST_STRING);
+
+        // File
+        exchange.getIn().setBody(requestFile);
+        message = CxfMessageHelper.getCxfInMessage(headerFilterStrategy, exchange, false);
+        is = message.getContent(InputStream.class);
+        assertNotNull("The input stream should not be null", is);
+        assertEquals("Don't get the right message", toString(is), REQUEST_STRING);
+
+        // transport header's case insensitiveness
+        // String
+        exchange.getIn().setBody("hello world");
+        exchange.getIn().setHeader("soapAction", "urn:hello:world");
+        message = CxfMessageHelper.getCxfInMessage(headerFilterStrategy, exchange, false);
+        // test message
+        Map<String, List<String>> headers = CastUtils.cast((Map<?, ?>)message.get(Message.PROTOCOL_HEADERS));
+        
+        // verify there is no duplicate
+        assertNotNull("The headers must be present", headers);
+        assertTrue("There must be one header entry", headers.size() == 1);
+        
+        // verify the soapaction can be retrieved in case-insensitive ways
+        verifyHeader(headers, "soapaction", "urn:hello:world");
+        verifyHeader(headers, "SoapAction", "urn:hello:world");
+        verifyHeader(headers, "SOAPAction", "urn:hello:world");
+    }
+
+    private void verifyHeader(Map<String, List<String>> headers, String name, String value) {
+        List<String> values = headers.get(name);
+        assertTrue("The entry must be available", values != null && values.size() == 1);
+        assertEquals("The value must match", values.get(0), value);
+    }
+
+    private String toString(InputStream is) throws IOException {
+        StringBuilder out = new StringBuilder();
+        CachedOutputStream os = new CachedOutputStream();
+        IOHelper.copy(is, os);
+        is.close();
+        os.writeCacheTo(out);
+        return out.toString();
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/components/camel-cxf-transport/src/test/resources/org/apache/camel/component/cxf/common/message/RequestBody.xml
----------------------------------------------------------------------
diff --git a/components/camel-cxf-transport/src/test/resources/org/apache/camel/component/cxf/common/message/RequestBody.xml b/components/camel-cxf-transport/src/test/resources/org/apache/camel/component/cxf/common/message/RequestBody.xml
new file mode 100644
index 0000000..1f170f0
--- /dev/null
+++ b/components/camel-cxf-transport/src/test/resources/org/apache/camel/component/cxf/common/message/RequestBody.xml
@@ -0,0 +1 @@
+<testMethod xmlns="http://camel.apache.org/testService"/>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/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 bbad18a..de771da 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
@@ -43,8 +43,8 @@ import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.component.cxf.common.header.CxfHeaderHelper;
 import org.apache.camel.component.cxf.common.message.CxfConstants;
-import org.apache.camel.component.cxf.util.CxfUtils;
 import org.apache.camel.component.cxf.util.ReaderInputStream;
 import org.apache.camel.impl.DefaultAttachment;
 import org.apache.camel.spi.HeaderFilterStrategy;
@@ -532,7 +532,7 @@ public class DefaultCxfBinding implements CxfBinding, HeaderFilterStrategyAware
         camelHeaders.put(CxfConstants.CAMEL_CXF_MESSAGE, cxfMessage);
         
         // Copy the http header to CAMEL as we do in camel-cxfrs
-        CxfUtils.copyHttpHeadersFromCxfToCamel(cxfMessage, camelMessage);
+        CxfHeaderHelper.copyHttpHeadersFromCxfToCamel(headerFilterStrategy, cxfMessage, camelMessage, exchange);
         
         if (cxfHeaders != null) {
             for (Map.Entry<String, List<String>> entry : cxfHeaders.entrySet()) {

http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/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 c060734..eb936ff 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
@@ -29,8 +29,8 @@ import javax.ws.rs.core.Response;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
+import org.apache.camel.component.cxf.common.header.CxfHeaderHelper;
 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;
@@ -108,7 +108,7 @@ public class DefaultCxfRsBinding implements CxfRsBinding, HeaderFilterStrategyAw
         org.apache.cxf.message.Message cxfMessage = cxfExchange.getInMessage();
         
         // TODO use header filter strategy and cxfToCamelHeaderMap
-        CxfUtils.copyHttpHeadersFromCxfToCamel(cxfMessage, camelMessage);
+        CxfHeaderHelper.copyHttpHeadersFromCxfToCamel(headerFilterStrategy, cxfMessage, camelMessage, camelExchange);
         
         // setup the charset from content-type header
         setCharsetWithContentType(camelExchange);
@@ -275,12 +275,6 @@ public class DefaultCxfRsBinding implements CxfRsBinding, HeaderFilterStrategyAw
         this.cxfToCamelHeaderMap = cxfToCamelHeaderMap;
     }
     
-    protected 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));
-        }
-    }
-    
     @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);

http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/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 27edb54..45894fb 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,8 +29,6 @@ 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;
@@ -62,38 +60,6 @@ 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)

http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfMessageHelperTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfMessageHelperTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfMessageHelperTest.java
deleted file mode 100644
index cdbdfef..0000000
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfMessageHelperTest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.cxf.util;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.transform.dom.DOMSource;
-
-import org.apache.camel.component.cxf.common.header.CxfHeaderFilterStrategy;
-import org.apache.camel.component.cxf.common.message.CxfMessageHelper;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.impl.DefaultExchange;
-import org.apache.camel.spi.HeaderFilterStrategy;
-import org.apache.camel.util.IOHelper;
-import org.apache.cxf.helpers.CastUtils;
-import org.apache.cxf.io.CachedOutputStream;
-import org.apache.cxf.message.Message;
-import org.apache.cxf.staxutils.StaxUtils;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class CxfMessageHelperTest extends Assert {
-    private static final String REQUEST_STRING =
-        "<testMethod xmlns=\"http://camel.apache.org/testService\"/>";
-    private DefaultCamelContext context = new DefaultCamelContext();
-
-    
-    // setup the default context for testing
-    @Test
-    public void testGetCxfInMessage() throws Exception {
-        HeaderFilterStrategy headerFilterStrategy = new CxfHeaderFilterStrategy();
-        org.apache.camel.Exchange exchange = new DefaultExchange(context);
-        // String
-        exchange.getIn().setBody("hello world");
-        org.apache.cxf.message.Message message = CxfMessageHelper.getCxfInMessage(
-                headerFilterStrategy, exchange, false);
-        // test message
-        InputStream is = message.getContent(InputStream.class);
-        assertNotNull("The input stream should not be null", is);
-        assertEquals("Don't get the right message", toString(is), "hello world");
-
-        // DOMSource
-        URL request = this.getClass().getResource("RequestBody.xml");
-        File requestFile = new File(request.toURI());
-        FileInputStream inputStream = new FileInputStream(requestFile);
-        XMLStreamReader xmlReader = StaxUtils.createXMLStreamReader(inputStream);
-        DOMSource source = new DOMSource(StaxUtils.read(xmlReader));
-        exchange.getIn().setBody(source);
-        message = CxfMessageHelper.getCxfInMessage(headerFilterStrategy, exchange, false);
-        is = message.getContent(InputStream.class);
-        assertNotNull("The input stream should not be null", is);
-        assertEquals("Don't get the right message", toString(is), REQUEST_STRING);
-
-        // File
-        exchange.getIn().setBody(requestFile);
-        message = CxfMessageHelper.getCxfInMessage(headerFilterStrategy, exchange, false);
-        is = message.getContent(InputStream.class);
-        assertNotNull("The input stream should not be null", is);
-        assertEquals("Don't get the right message", toString(is), REQUEST_STRING);
-
-        // transport header's case insensitiveness
-        // String
-        exchange.getIn().setBody("hello world");
-        exchange.getIn().setHeader("soapAction", "urn:hello:world");
-        message = CxfMessageHelper.getCxfInMessage(headerFilterStrategy, exchange, false);
-        // test message
-        Map<String, List<String>> headers = CastUtils.cast((Map<?, ?>)message.get(Message.PROTOCOL_HEADERS));
-        
-        // verify there is no duplicate
-        assertNotNull("The headers must be present", headers);
-        assertTrue("There must be one header entry", headers.size() == 1);
-        
-        // verify the soapaction can be retrieved in case-insensitive ways
-        verifyHeader(headers, "soapaction", "urn:hello:world");
-        verifyHeader(headers, "SoapAction", "urn:hello:world");
-        verifyHeader(headers, "SOAPAction", "urn:hello:world");
-    }
-
-    private void verifyHeader(Map<String, List<String>> headers, String name, String value) {
-        List<String> values = headers.get(name);
-        assertTrue("The entry must be available", values != null && values.size() == 1);
-        assertEquals("The value must match", values.get(0), value);
-    }
-
-    private String toString(InputStream is) throws IOException {
-        StringBuilder out = new StringBuilder();
-        CachedOutputStream os = new CachedOutputStream();
-        IOHelper.copy(is, os);
-        is.close();
-        os.writeCacheTo(out);
-        return out.toString();
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/transport/CxfRsCamelTransport.xml
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/transport/CxfRsCamelTransport.xml b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/transport/CxfRsCamelTransport.xml
index 02b5027..1c7de85 100644
--- a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/transport/CxfRsCamelTransport.xml
+++ b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/transport/CxfRsCamelTransport.xml
@@ -51,14 +51,9 @@
             <setHeader headerName="Content-Type">
                 <constant>text/plain</constant>
             </setHeader>
-            <setHeader headerName="CamelHttpUri">
-                <simple>/greeting/hello/${body}</simple>
-            </setHeader>
-            <!-- doesn't work for Camel tranport
             <setHeader headerName="CamelHttpPath">
                 <simple>/greeting/hello/${body}</simple>
             </setHeader>
-            -->
             <setHeader headerName="CamelHttpMethod">
                 <constant>GET</constant>
             </setHeader>

http://git-wip-us.apache.org/repos/asf/camel/blob/c69e59a3/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/util/RequestBody.xml
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/util/RequestBody.xml b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/util/RequestBody.xml
deleted file mode 100644
index 1f170f0..0000000
--- a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/util/RequestBody.xml
+++ /dev/null
@@ -1 +0,0 @@
-<testMethod xmlns="http://camel.apache.org/testService"/>
\ No newline at end of file