CAMEL-8774 Filter out the protocol message from the request message header Conflicts: components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1426de82 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1426de82 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1426de82 Branch: refs/heads/camel-2.14.x Commit: 1426de82c80a27f057dcc4f5fce57f78ec5dcb8d Parents: 9167208 Author: Willem Jiang <willem.ji...@gmail.com> Authored: Thu May 14 16:01:54 2015 +0800 Committer: Willem Jiang <willem.ji...@gmail.com> Committed: Thu May 14 16:15:09 2015 +0800 ---------------------------------------------------------------------- .../org/apache/camel/util/MessageHelper.java | 21 ++++++++++++++- .../apache/camel/util/MessageHelperTest.java | 28 ++++++++++++++++++++ .../jetty/DefaultJettyHttpBinding.java | 4 +-- 3 files changed, 50 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/1426de82/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java index 879fcbf..61a500a 100644 --- a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java +++ b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java @@ -26,6 +26,7 @@ import java.util.Date; import java.util.List; import java.util.Map; import java.util.TreeMap; + import javax.xml.transform.Source; import org.apache.camel.BytesSource; @@ -36,6 +37,7 @@ import org.apache.camel.StreamCache; import org.apache.camel.StringSource; import org.apache.camel.WrappedFile; import org.apache.camel.spi.ExchangeFormatter; +import org.apache.camel.spi.HeaderFilterStrategy; /** * Some helper methods when working with {@link org.apache.camel.Message}. @@ -461,6 +463,18 @@ public final class MessageHelper { * @param override whether to override existing headers */ public static void copyHeaders(Message source, Message target, boolean override) { + copyHeaders(source, target, null, override); + } + + /** + * Copies the headers from the source to the target message. + * + * @param source the source message + * @param target the target message + * @param strategy the header filter strategy which could help us to filter the protocol message headers + * @param override whether to override existing headers + */ + public static void copyHeaders(Message source, Message target, HeaderFilterStrategy strategy, boolean override) { if (!source.hasHeaders()) { return; } @@ -470,7 +484,12 @@ public final class MessageHelper { Object value = entry.getValue(); if (target.getHeader(key) == null || override) { - target.setHeader(key, value); + if (strategy == null) { + target.setHeader(key, value); + } else if (!strategy.applyFilterToCamelHeaders(key, value, target.getExchange())) { + // Just make sure we don't copy the protocol headers to target + target.setHeader(key, value); + } } } } http://git-wip-us.apache.org/repos/asf/camel/blob/1426de82/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java b/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java index 4826c41..e7cc132 100644 --- a/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java +++ b/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java @@ -19,6 +19,7 @@ package org.apache.camel.util; import java.io.IOException; import java.io.OutputStream; import java.io.StringReader; + import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; @@ -29,7 +30,9 @@ import org.apache.camel.Message; import org.apache.camel.StreamCache; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultExchange; +import org.apache.camel.impl.DefaultHeaderFilterStrategy; import org.apache.camel.impl.DefaultMessage; +import org.apache.camel.spi.HeaderFilterStrategy; /** * Test cases for {@link MessageHelper} @@ -113,6 +116,29 @@ public class MessageHelperTest extends TestCase { assertEquals(123, target.getHeader("foo")); assertEquals(456, target.getHeader("bar")); } + + public void testCopyHeadersWithHeaderFilterStrategy() throws Exception { + CamelContext context = new DefaultCamelContext(); + context.start(); + + message = new DefaultExchange(context).getIn(); + + Message source = message; + Message target = message.getExchange().getOut(); + + DefaultHeaderFilterStrategy headerFilterStrategy = new DefaultHeaderFilterStrategy(); + headerFilterStrategy.setOutFilterPattern("foo"); + + source.setHeader("foo", 123); + source.setHeader("bar", 456); + target.setHeader("bar", "yes"); + + MessageHelper.copyHeaders(source, target, headerFilterStrategy, true); + + assertEquals(null, target.getHeader("foo")); + assertEquals(456, target.getHeader("bar")); + context.stop(); + } public void testDumpAsXmlPlainBody() throws Exception { CamelContext context = new DefaultCamelContext(); @@ -209,5 +235,7 @@ public class MessageHelperTest extends TestCase { assertEquals("java.lang.Integer", dump.getHeaders().get(0).getType()); assertEquals("123", dump.getHeaders().get(0).getValue()); } + + } http://git-wip-us.apache.org/repos/asf/camel/blob/1426de82/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java index a69c82c..94d3ea5 100644 --- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java @@ -35,7 +35,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * @version + * @version */ public class DefaultJettyHttpBinding implements JettyHttpBinding { @@ -115,7 +115,7 @@ public class DefaultJettyHttpBinding implements JettyHttpBinding { // preserve headers from in by copying any non existing headers // to avoid overriding existing headers with old values - MessageHelper.copyHeaders(exchange.getIn(), answer, false); + MessageHelper.copyHeaders(exchange.getIn(), answer, strategy, false); // extract body after headers has been set as we want to ensure content-type from Jetty HttpExchange // has been populated first