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=")); }