CAMEL-11149: SPI - Allow to plugin different headers map implementation
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/28efd0d5 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/28efd0d5 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/28efd0d5 Branch: refs/heads/master Commit: 28efd0d57e7d9e1b9cbb5d830c9872d537ce905b Parents: 5b22da6 Author: Claus Ibsen <davscl...@apache.org> Authored: Wed May 24 17:07:06 2017 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu May 25 11:09:52 2017 +0200 ---------------------------------------------------------------------- .../component/file/GenericFileMessage.java | 20 ++++- .../org/apache/camel/impl/DefaultExchange.java | 1 + .../org/apache/camel/impl/DefaultMessage.java | 28 +++++-- .../org/apache/camel/impl/MessageSupport.java | 33 +++++++- .../component/file/GenericFileMessageTest.java | 11 ++- .../camel/component/rest/RestProducerTest.java | 12 ++- .../impl/CustomHeadersMapFactoryRouteTest.java | 83 ++++++++++++++++++++ .../camel/impl/DefaultMessageHeaderTest.java | 33 ++++---- .../apache/camel/impl/MessageSupportTest.java | 4 +- .../BeanProcessorSpecializedMessageTest.java | 9 ++- .../camel/processor/SetBodyProcessorTest.java | 9 ++- .../camel/processor/SplitterPojoTest.java | 5 +- .../org/apache/camel/util/GZIPHelperTest.java | 3 +- .../org/apache/camel/util/IOHelperTest.java | 3 +- .../apache/camel/util/MessageHelperTest.java | 7 +- .../ApiMethodPropertiesHelperTest.java | 8 +- .../xml/AbstractCamelContextFactoryBean.java | 6 ++ 17 files changed, 229 insertions(+), 46 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/main/java/org/apache/camel/component/file/GenericFileMessage.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileMessage.java b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileMessage.java index 703c832..71c6d6b 100644 --- a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileMessage.java +++ b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileMessage.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.file; +import org.apache.camel.CamelContext; import org.apache.camel.Message; import org.apache.camel.impl.DefaultMessage; @@ -25,13 +26,30 @@ import org.apache.camel.impl.DefaultMessage; public class GenericFileMessage<T> extends DefaultMessage { private GenericFile<T> file; + /** + * @deprecated use {@link #GenericFileMessage(CamelContext)} + */ + @Deprecated public GenericFileMessage() { } + public GenericFileMessage(CamelContext camelContext) { + super(camelContext); + } + + /** + * @deprecated use {@link #GenericFileMessage(CamelContext, GenericFile)} + */ + @Deprecated public GenericFileMessage(GenericFile<T> file) { this.file = file; } + public GenericFileMessage(CamelContext camelContext, GenericFile<T> file) { + super(camelContext); + this.file = file; + } + @Override protected Object createBody() { return file != null ? file.getBody() : super.createBody(); @@ -47,7 +65,7 @@ public class GenericFileMessage<T> extends DefaultMessage { @Override public GenericFileMessage<T> newInstance() { - return new GenericFileMessage<T>(); + return new GenericFileMessage<T>(getCamelContext()); } @Override http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java index 0ee5e8f..b8e7a9d 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java @@ -503,6 +503,7 @@ public final class DefaultExchange implements Exchange { if (message instanceof MessageSupport) { MessageSupport messageSupport = (MessageSupport)message; messageSupport.setExchange(this); + messageSupport.setCamelContext(getContext()); } } http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java index d6f44f4..7adb123 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java @@ -28,7 +28,6 @@ import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.spi.HeadersMapFactory; import org.apache.camel.util.AttachmentMap; -import org.apache.camel.util.CaseInsensitiveMap; import org.apache.camel.util.EndpointHelper; import org.apache.camel.util.ObjectHelper; @@ -50,6 +49,17 @@ public class DefaultMessage extends MessageSupport { private Map<String, DataHandler> attachments; private Map<String, Attachment> attachmentObjects; + /** + * @deprecated use {@link #DefaultMessage(CamelContext)} + */ + @Deprecated + public DefaultMessage() { + } + + public DefaultMessage(CamelContext camelContext) { + setCamelContext(camelContext); + } + public boolean isFault() { return fault; } @@ -208,11 +218,13 @@ public class DefaultMessage extends MessageSupport { } public void setHeaders(Map<String, Object> headers) { - if (getExchange().getContext().getHeadersMapFactory().isInstanceOf(headers)) { + ObjectHelper.notNull(getCamelContext(), "CamelContext", this); + + if (getCamelContext().getHeadersMapFactory().isInstanceOf(headers)) { this.headers = headers; } else { // create a new map - this.headers = getExchange().getContext().getHeadersMapFactory().fromMap(headers); + this.headers = getCamelContext().getHeadersMapFactory().fromMap(headers); } } @@ -225,7 +237,11 @@ public class DefaultMessage extends MessageSupport { } public DefaultMessage newInstance() { - return new DefaultMessage(); + ObjectHelper.notNull(getCamelContext(), "CamelContext", this); + + DefaultMessage answer = new DefaultMessage(); + answer.setCamelContext(getCamelContext()); + return answer; } /** @@ -237,7 +253,9 @@ public class DefaultMessage extends MessageSupport { * the underlying inbound transport */ protected Map<String, Object> createHeaders() { - Map<String, Object> map = getExchange().getContext().getHeadersMapFactory().newMap(); + ObjectHelper.notNull(getCamelContext(), "CamelContext", this); + + Map<String, Object> map = getCamelContext().getHeadersMapFactory().newMap(); populateInitialHeaders(map); return map; } http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java b/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java index d02fbae..6b7c774 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java +++ b/camel-core/src/main/java/org/apache/camel/impl/MessageSupport.java @@ -16,6 +16,8 @@ */ package org.apache.camel.impl; +import org.apache.camel.CamelContext; +import org.apache.camel.CamelContextAware; import org.apache.camel.Exchange; import org.apache.camel.InvalidPayloadException; import org.apache.camel.Message; @@ -33,7 +35,8 @@ import org.apache.camel.spi.DataTypeAware; * * @version */ -public abstract class MessageSupport implements Message, DataTypeAware { +public abstract class MessageSupport implements Message, CamelContextAware, DataTypeAware { + private CamelContext camelContext; private Exchange exchange; private Object body; private String messageId; @@ -150,6 +153,10 @@ public abstract class MessageSupport implements Message, DataTypeAware { public Message copy() { Message answer = newInstance(); + // must copy over CamelContext + if (answer instanceof CamelContextAware) { + ((CamelContextAware) answer).setCamelContext(getCamelContext()); + } answer.copyFrom(this); return answer; } @@ -159,10 +166,16 @@ public abstract class MessageSupport implements Message, DataTypeAware { // the same instance so do not need to copy return; } - copyFromWithNewBody(that, that.getBody()); + + // must copy over CamelContext + if (that instanceof CamelContextAware) { + setCamelContext(((CamelContextAware) that).getCamelContext()); + } if (that instanceof DataTypeAware) { setDataType(((DataTypeAware)that).getDataType()); } + + copyFromWithNewBody(that, that.getBody()); } public void copyFromWithNewBody(Message that, Object newBody) { @@ -171,6 +184,12 @@ public abstract class MessageSupport implements Message, DataTypeAware { return; } + // must copy over CamelContext + if (that instanceof CamelContextAware) { + setCamelContext(((CamelContextAware) that).getCamelContext()); + } + // should likely not set DataType as the new body may be a different type than the original body + setMessageId(that.getMessageId()); setBody(newBody); setFault(that.isFault()); @@ -202,7 +221,15 @@ public abstract class MessageSupport implements Message, DataTypeAware { public void setExchange(Exchange exchange) { this.exchange = exchange; } - + + public CamelContext getCamelContext() { + return camelContext; + } + + public void setCamelContext(CamelContext camelContext) { + this.camelContext = camelContext; + } + public void copyAttachments(Message that) { // the attachments may be the same instance if the end user has made some mistake // and set the OUT message with the same attachment instance of the IN message etc http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/test/java/org/apache/camel/component/file/GenericFileMessageTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/component/file/GenericFileMessageTest.java b/camel-core/src/test/java/org/apache/camel/component/file/GenericFileMessageTest.java index 6108029..37dcc79 100644 --- a/camel-core/src/test/java/org/apache/camel/component/file/GenericFileMessageTest.java +++ b/camel-core/src/test/java/org/apache/camel/component/file/GenericFileMessageTest.java @@ -18,22 +18,25 @@ package org.apache.camel.component.file; import java.io.File; +import org.apache.camel.CamelContext; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; +import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.util.FileUtil; public class GenericFileMessageTest extends ContextTestSupport { + private CamelContext camelContext = new DefaultCamelContext(); + public void testGenericMessageToStringConversion() throws Exception { - GenericFileMessage<File> message = new GenericFileMessage<File>(); + GenericFileMessage<File> message = new GenericFileMessage<File>(camelContext); assertStringContains(message.toString(), "org.apache.camel.component.file.GenericFileMessage@"); GenericFile<File> file = new GenericFile<File>(true); file.setFileName("target/test.txt"); file.setFile(new File("target/test.txt")); - message = new GenericFileMessage<File>(file); + message = new GenericFileMessage<File>(camelContext, file); assertEquals(FileUtil.isWindows() ? "target\\test.txt" : "target/test.txt", message.toString()); - } public void testGenericFileContentType() throws Exception { @@ -41,7 +44,7 @@ public class GenericFileMessageTest extends ContextTestSupport { file.setEndpointPath("target"); file.setFileName("target"); file.setFile(new File("target/camel-core-test.log")); - GenericFileMessage<File> message = new GenericFileMessage<File>(file); + GenericFileMessage<File> message = new GenericFileMessage<File>(camelContext, file); file.populateHeaders(message); assertEquals("Get a wrong file content type", "txt", message.getHeader(Exchange.FILE_CONTENT_TYPE)); } http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java b/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java index 2ca0981..0145e2b 100644 --- a/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java +++ b/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java @@ -19,6 +19,8 @@ package org.apache.camel.component.rest; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; +import org.apache.camel.CamelContext; +import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultMessage; import org.junit.Test; @@ -27,6 +29,8 @@ import static org.junit.Assert.assertNull; public class RestProducerTest { + private CamelContext camelContext = new DefaultCamelContext(); + @Test public void shouldCreateDefinedQueryParameters() throws UnsupportedEncodingException, URISyntaxException { assertEquals("param=value", RestProducer.createQueryParameters("param=value", null)); @@ -35,7 +39,7 @@ public class RestProducerTest { @Test public void shouldCreateOptionalPlaceholderQueryParametersForPresentValues() throws UnsupportedEncodingException, URISyntaxException { - final DefaultMessage message = new DefaultMessage(); + final DefaultMessage message = new DefaultMessage(camelContext); message.setHeader("param", "header"); assertEquals("param=header", RestProducer.createQueryParameters("param={param?}", message)); @@ -43,7 +47,7 @@ public class RestProducerTest { @Test public void shouldCreatePlaceholderQueryParameters() throws UnsupportedEncodingException, URISyntaxException { - final DefaultMessage message = new DefaultMessage(); + final DefaultMessage message = new DefaultMessage(camelContext); message.setHeader("param", "header"); assertEquals("param=header", RestProducer.createQueryParameters("param={param}", message)); @@ -57,14 +61,14 @@ public class RestProducerTest { @Test public void shouldNotCreateOptionalPlaceholderQueryParametersForMissingValues() throws UnsupportedEncodingException, URISyntaxException { - final DefaultMessage message = new DefaultMessage(); + final DefaultMessage message = new DefaultMessage(camelContext); assertEquals("", RestProducer.createQueryParameters("param={param?}", message)); } @Test public void shouldSupportAllCombinations() throws UnsupportedEncodingException, URISyntaxException { - final DefaultMessage message = new DefaultMessage(); + final DefaultMessage message = new DefaultMessage(camelContext); message.setHeader("required", "header_required"); message.setHeader("optional_present", "header_optional_present"); http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/test/java/org/apache/camel/impl/CustomHeadersMapFactoryRouteTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/impl/CustomHeadersMapFactoryRouteTest.java b/camel-core/src/test/java/org/apache/camel/impl/CustomHeadersMapFactoryRouteTest.java new file mode 100644 index 0000000..9c2faec --- /dev/null +++ b/camel-core/src/test/java/org/apache/camel/impl/CustomHeadersMapFactoryRouteTest.java @@ -0,0 +1,83 @@ +/** + * 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.impl; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.camel.CamelContext; +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.spi.HeadersMapFactory; + +public class CustomHeadersMapFactoryRouteTest extends ContextTestSupport { + + private HeadersMapFactory custom = new CustomHeadersMapFactory(); + + @Override + protected CamelContext createCamelContext() throws Exception { + CamelContext context = super.createCamelContext(); + context.setHeadersMapFactory(custom); + return context; + } + + public void testCustomHeaders() throws Exception { + getMockEndpoint("mock:result").expectedHeaderReceived("foo", 123); + getMockEndpoint("mock:result").expectedHeaderReceived("FOO", 456); + getMockEndpoint("mock:result").expectedHeaderReceived("Bar", "yes"); + + Map<String, Object> headers = new HashMap<>(); + headers.put("foo", 123); + headers.put("FOO", 456); + headers.put("Bar", "yes"); + + template.sendBodyAndHeaders("direct:start", "Hello World", headers); + + assertMockEndpointsSatisfied(); + + assertSame(custom, context.getHeadersMapFactory()); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start") + .to("mock:result"); + } + }; + } + + private static class CustomHeadersMapFactory implements HeadersMapFactory { + + @Override + public Map<String, Object> newMap() { + return new HashMap<>(); + } + + @Override + public Map<String, Object> fromMap(Map<String, Object> map) { + return new HashMap<>(map); + } + + @Override + public boolean isInstanceOf(Map<String, Object> map) { + return map instanceof HashMap; + } + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageHeaderTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageHeaderTest.java b/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageHeaderTest.java index ff66227..0cc5fb3 100644 --- a/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageHeaderTest.java +++ b/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageHeaderTest.java @@ -17,15 +17,18 @@ package org.apache.camel.impl; import junit.framework.TestCase; +import org.apache.camel.CamelContext; import org.apache.camel.Message; /** * @version */ public class DefaultMessageHeaderTest extends TestCase { + + private CamelContext camelContext = new DefaultCamelContext(); public void testLookupCaseAgnostic() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("foo", "cheese"); @@ -36,7 +39,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testLookupCaseAgnosticAddHeader() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("foo", "cheese"); @@ -55,7 +58,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testLookupCaseAgnosticAddHeader2() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("foo", "cheese"); @@ -74,7 +77,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testLookupCaseAgnosticAddHeaderRemoveHeader() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("foo", "cheese"); @@ -97,7 +100,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testSetWithDifferentCase() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("foo", "cheese"); @@ -109,7 +112,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testRemoveWithDifferentCase() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("foo", "cheese"); @@ -129,7 +132,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testRemoveHeaderWithNullValue() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("tick", null); @@ -139,7 +142,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testRemoveHeadersWithWildcard() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("tick", "bla"); @@ -156,7 +159,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testRemoveHeadersAllWithWildcard() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("tick", "bla"); @@ -173,7 +176,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testRemoveHeadersWithExclude() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("tick", "bla"); @@ -189,7 +192,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testRemoveHeadersAllWithExclude() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("tick", "bla"); @@ -209,7 +212,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testRemoveHeadersWithWildcardInExclude() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("tick", "bla"); @@ -225,7 +228,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testRemoveHeadersWithNulls() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("tick", "bla"); @@ -244,7 +247,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testRemoveHeadersWithNonExcludeHeaders() { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(camelContext); assertNull(msg.getHeader("foo")); msg.setHeader("tick", "bla"); @@ -257,7 +260,7 @@ public class DefaultMessageHeaderTest extends TestCase { } public void testWithDefaults() { - DefaultMessage msg = new DefaultMessage(); + DefaultMessage msg = new DefaultMessage(camelContext); // must have exchange so to leverage the type converters msg.setExchange(new DefaultExchange(new DefaultCamelContext())); http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/test/java/org/apache/camel/impl/MessageSupportTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/impl/MessageSupportTest.java b/camel-core/src/test/java/org/apache/camel/impl/MessageSupportTest.java index 910f95d..be97658 100644 --- a/camel-core/src/test/java/org/apache/camel/impl/MessageSupportTest.java +++ b/camel-core/src/test/java/org/apache/camel/impl/MessageSupportTest.java @@ -61,7 +61,7 @@ public class MessageSupportTest extends ContextTestSupport { } public void testGetMessageIdWithoutAnExchange() { - Message in = new DefaultMessage(); + Message in = new DefaultMessage(context); assertNotNull(in.getMessageId()); } @@ -73,7 +73,7 @@ public class MessageSupportTest extends ContextTestSupport { Map<String, Object> headers = in.getHeaders(); headers.put("foo", 123); - Message out = new DefaultMessage(); + Message out = new DefaultMessage(context); out.setBody("Bye World"); out.setHeaders(headers); http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/test/java/org/apache/camel/processor/BeanProcessorSpecializedMessageTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/processor/BeanProcessorSpecializedMessageTest.java b/camel-core/src/test/java/org/apache/camel/processor/BeanProcessorSpecializedMessageTest.java index 6e86328..93a9f3c 100644 --- a/camel-core/src/test/java/org/apache/camel/processor/BeanProcessorSpecializedMessageTest.java +++ b/camel-core/src/test/java/org/apache/camel/processor/BeanProcessorSpecializedMessageTest.java @@ -16,6 +16,7 @@ */ package org.apache.camel.processor; +import org.apache.camel.CamelContext; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; import org.apache.camel.Predicate; @@ -52,7 +53,7 @@ public class BeanProcessorSpecializedMessageTest extends ContextTestSupport { template.send("direct:start", new Processor() { public void process(Exchange exchange) throws Exception { - MyMessage my = new MyMessage(); + MyMessage my = new MyMessage(exchange.getContext()); my.setBody("Hello World"); my.setHeader("foo", 123); exchange.setIn(my); @@ -77,9 +78,13 @@ public class BeanProcessorSpecializedMessageTest extends ContextTestSupport { public static class MyMessage extends DefaultMessage { + public MyMessage(CamelContext camelContext) { + super(camelContext); + } + @Override public MyMessage newInstance() { - return new MyMessage(); + return new MyMessage(getCamelContext()); } } http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/test/java/org/apache/camel/processor/SetBodyProcessorTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/processor/SetBodyProcessorTest.java b/camel-core/src/test/java/org/apache/camel/processor/SetBodyProcessorTest.java index 0e311e5..93a7f6a 100644 --- a/camel-core/src/test/java/org/apache/camel/processor/SetBodyProcessorTest.java +++ b/camel-core/src/test/java/org/apache/camel/processor/SetBodyProcessorTest.java @@ -16,6 +16,7 @@ */ package org.apache.camel.processor; +import org.apache.camel.CamelContext; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; import org.apache.camel.Predicate; @@ -52,7 +53,7 @@ public class SetBodyProcessorTest extends ContextTestSupport { template.send("direct:start", new Processor() { public void process(Exchange exchange) throws Exception { - MyMessage my = new MyMessage(); + MyMessage my = new MyMessage(exchange.getContext()); my.setBody("World"); my.setHeader("foo", 123); exchange.setIn(my); @@ -89,9 +90,13 @@ public class SetBodyProcessorTest extends ContextTestSupport { private static class MyMessage extends DefaultMessage { + public MyMessage(CamelContext camelContext) { + super(camelContext); + } + @Override public MyMessage newInstance() { - return new MyMessage(); + return new MyMessage(getCamelContext()); } } } http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/test/java/org/apache/camel/processor/SplitterPojoTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/processor/SplitterPojoTest.java b/camel-core/src/test/java/org/apache/camel/processor/SplitterPojoTest.java index 70197df..2733c0e 100644 --- a/camel-core/src/test/java/org/apache/camel/processor/SplitterPojoTest.java +++ b/camel-core/src/test/java/org/apache/camel/processor/SplitterPojoTest.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.camel.Body; +import org.apache.camel.CamelContext; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; import org.apache.camel.Header; @@ -115,7 +116,7 @@ public class SplitterPojoTest extends ContextTestSupport { * @param body the payload of the incoming message * @return a list containing each part splitted */ - public List<Message> splitMessage(@Header(value = "user") String header, @Body String body) { + public List<Message> splitMessage(@Header(value = "user") String header, @Body String body, CamelContext camelContext) { // we can leverage the Parameter Binding Annotations // http://camel.apache.org/parameter-binding-annotations.html // to access the message header and body at same time, @@ -125,7 +126,7 @@ public class SplitterPojoTest extends ContextTestSupport { List<Message> answer = new ArrayList<Message>(); String[] parts = header.split(","); for (String part : parts) { - DefaultMessage message = new DefaultMessage(); + DefaultMessage message = new DefaultMessage(camelContext); message.setHeader("user", part); message.setBody(body); answer.add(message); http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/test/java/org/apache/camel/util/GZIPHelperTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/util/GZIPHelperTest.java b/camel-core/src/test/java/org/apache/camel/util/GZIPHelperTest.java index f4c90c4..f2894ed 100644 --- a/camel-core/src/test/java/org/apache/camel/util/GZIPHelperTest.java +++ b/camel-core/src/test/java/org/apache/camel/util/GZIPHelperTest.java @@ -22,6 +22,7 @@ import java.io.InputStream; import org.apache.camel.Message; import org.apache.camel.converter.IOConverter; +import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultMessage; import org.junit.Test; @@ -83,7 +84,7 @@ public class GZIPHelperTest { } private Message createMessageWithContentEncodingHeader(String contentEncoding) { - Message msg = new DefaultMessage(); + Message msg = new DefaultMessage(new DefaultCamelContext()); msg.setHeader("Content-Encoding", contentEncoding); return msg; http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/test/java/org/apache/camel/util/IOHelperTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/util/IOHelperTest.java b/camel-core/src/test/java/org/apache/camel/util/IOHelperTest.java index da2aecf..037c323 100644 --- a/camel-core/src/test/java/org/apache/camel/util/IOHelperTest.java +++ b/camel-core/src/test/java/org/apache/camel/util/IOHelperTest.java @@ -28,6 +28,7 @@ import java.io.PrintWriter; import junit.framework.TestCase; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; +import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultExchange; /** @@ -104,7 +105,7 @@ public class IOHelperTest extends TestCase { } public void testCharsetName() throws Exception { - Exchange exchange = new DefaultExchange((CamelContext) null); + Exchange exchange = new DefaultExchange(new DefaultCamelContext()); assertNull(IOHelper.getCharsetName(exchange, false)); http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/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 f85ea83..c0c467c 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 @@ -39,10 +39,11 @@ import org.apache.camel.impl.DefaultMessage; public class MessageHelperTest extends TestCase { private Message message; + private CamelContext camelContext = new DefaultCamelContext(); @Override protected void setUp() throws Exception { - message = new DefaultMessage(); + message = new DefaultMessage(camelContext); } /* @@ -94,7 +95,7 @@ public class MessageHelperTest extends TestCase { public void testCopyHeaders() throws Exception { Message source = message; - Message target = new DefaultMessage(); + Message target = new DefaultMessage(camelContext); source.setHeader("foo", 123); source.setHeader("bar", 456); @@ -108,7 +109,7 @@ public class MessageHelperTest extends TestCase { public void testCopyHeadersOverride() throws Exception { Message source = message; - Message target = new DefaultMessage(); + Message target = new DefaultMessage(camelContext); source.setHeader("foo", 123); source.setHeader("bar", 456); http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/camel-core/src/test/java/org/apache/camel/util/component/ApiMethodPropertiesHelperTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/util/component/ApiMethodPropertiesHelperTest.java b/camel-core/src/test/java/org/apache/camel/util/component/ApiMethodPropertiesHelperTest.java index f13f8a5..65cc5ae 100644 --- a/camel-core/src/test/java/org/apache/camel/util/component/ApiMethodPropertiesHelperTest.java +++ b/camel-core/src/test/java/org/apache/camel/util/component/ApiMethodPropertiesHelperTest.java @@ -18,7 +18,9 @@ package org.apache.camel.util.component; import java.util.HashMap; +import org.apache.camel.CamelContext; import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultExchange; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -45,8 +47,12 @@ public class ApiMethodPropertiesHelperTest { @Test public void testGetExchangeProperties() throws Exception { + final CamelContext camelContext = new DefaultCamelContext(); + MockEndpoint mock = new MockEndpoint(); + mock.setCamelContext(camelContext); + final HashMap<String, Object> properties = new HashMap<String, Object>(); - final DefaultExchange exchange = new DefaultExchange(new MockEndpoint()); + final DefaultExchange exchange = new DefaultExchange(mock); exchange.getIn().setHeader(PROPERTY_1, VALUE_1); exchange.getIn().setHeader(PROPERTY_2, VALUE_2); exchange.getIn().setHeader(PROPERTY_3, VALUE_3); http://git-wip-us.apache.org/repos/asf/camel/blob/28efd0d5/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java ---------------------------------------------------------------------- diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java index f7a8b74..32f53f8 100644 --- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java +++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java @@ -88,6 +88,7 @@ import org.apache.camel.spi.EventFactory; import org.apache.camel.spi.EventNotifier; import org.apache.camel.spi.ExecutorServiceManager; import org.apache.camel.spi.FactoryFinderResolver; +import org.apache.camel.spi.HeadersMapFactory; import org.apache.camel.spi.InflightRepository; import org.apache.camel.spi.InterceptStrategy; import org.apache.camel.spi.LifecycleStrategy; @@ -256,6 +257,11 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex LOG.info("Using custom RuntimeEndpointRegistry: {}", runtimeEndpointRegistry); getContext().setRuntimeEndpointRegistry(runtimeEndpointRegistry); } + HeadersMapFactory headersMapFactory = getBeanForType(HeadersMapFactory.class); + if (headersMapFactory != null) { + LOG.info("Using custom HeadersMapFactory: {}", headersMapFactory); + getContext().setHeadersMapFactory(headersMapFactory); + } // custom type converters defined as <bean>s Map<String, TypeConverters> typeConverters = getContext().getRegistry().findByTypeWithName(TypeConverters.class); if (typeConverters != null && !typeConverters.isEmpty()) {