CAMEL-9200: Context component conflates endpoints with the same local id from different CamelContexts. Thanks to Aaron Birkland for the patch.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1b3b64a7 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1b3b64a7 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1b3b64a7 Branch: refs/heads/camel-2.16.x Commit: 1b3b64a750a913562b9dc89f0d7dc32f6c4020e2 Parents: fa3ec4d Author: Claus Ibsen <davscl...@apache.org> Authored: Thu Apr 28 16:45:00 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Apr 28 17:19:48 2016 +0200 ---------------------------------------------------------------------- .../org/apache/camel/impl/DefaultEndpoint.java | 5 +++- .../component/context/ContextEndpoint.java | 24 ++++++++++++++++++++ .../context/LocalContextComponent.java | 6 +++-- .../context/SpringDslContextComponentTest.java | 2 +- 4 files changed, 33 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/1b3b64a7/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java index ff8253c..eded370 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java @@ -147,7 +147,10 @@ public abstract class DefaultEndpoint extends ServiceSupport implements Endpoint public boolean equals(Object object) { if (object instanceof DefaultEndpoint) { DefaultEndpoint that = (DefaultEndpoint)object; - return ObjectHelper.equal(this.getEndpointUri(), that.getEndpointUri()); + // must also match the same CamelContext in case we compare endpoints from different contexts + String thisContextName = this.getCamelContext() != null ? this.getCamelContext().getName() : null; + String thatContextName = that.getCamelContext() != null ? that.getCamelContext().getName() : null; + return ObjectHelper.equal(this.getEndpointUri(), that.getEndpointUri()) && ObjectHelper.equal(thisContextName, thatContextName); } return false; } http://git-wip-us.apache.org/repos/asf/camel/blob/1b3b64a7/components/camel-context/src/main/java/org/apache/camel/component/context/ContextEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-context/src/main/java/org/apache/camel/component/context/ContextEndpoint.java b/components/camel-context/src/main/java/org/apache/camel/component/context/ContextEndpoint.java index 49dfddd..4704b1d 100644 --- a/components/camel-context/src/main/java/org/apache/camel/component/context/ContextEndpoint.java +++ b/components/camel-context/src/main/java/org/apache/camel/component/context/ContextEndpoint.java @@ -16,6 +16,9 @@ */ package org.apache.camel.component.context; +import java.util.Map; + +import org.apache.camel.CamelContext; import org.apache.camel.Component; import org.apache.camel.Consumer; import org.apache.camel.DelegateEndpoint; @@ -87,4 +90,25 @@ public class ContextEndpoint extends DefaultEndpoint implements DelegateEndpoint public boolean isSingleton() { return delegate.isSingleton(); } + + @Override + public void start() throws Exception { + // noop by purpose + } + + @Override + public void stop() throws Exception { + // noop by purpose + } + + @Override + public void configureProperties(Map<String, Object> options) { + // noop by purpose + } + + @Override + public void setCamelContext(CamelContext context) { + // noop by purpose + } + } http://git-wip-us.apache.org/repos/asf/camel/blob/1b3b64a7/components/camel-context/src/main/java/org/apache/camel/component/context/LocalContextComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-context/src/main/java/org/apache/camel/component/context/LocalContextComponent.java b/components/camel-context/src/main/java/org/apache/camel/component/context/LocalContextComponent.java index d341b4b..9ae64a7 100644 --- a/components/camel-context/src/main/java/org/apache/camel/component/context/LocalContextComponent.java +++ b/components/camel-context/src/main/java/org/apache/camel/component/context/LocalContextComponent.java @@ -78,7 +78,8 @@ public class LocalContextComponent extends DefaultComponent { Endpoint endpoint = map.get(remaining); if (endpoint != null) { logUsingEndpoint(uri, endpoint); - return endpoint; + return new ContextEndpoint(uri, this, endpoint); + //return new ExportedEndpoint(endpoint); } // look to see if there is an endpoint of name 'remaining' using one of the local endpoints within @@ -90,7 +91,8 @@ public class LocalContextComponent extends DefaultComponent { endpoint = map.get(newUri); if (endpoint != null) { logUsingEndpoint(uri, endpoint); - return endpoint; + return new ContextEndpoint(uri, this, endpoint); + //return new ExportedEndpoint(endpoint); } } } http://git-wip-us.apache.org/repos/asf/camel/blob/1b3b64a7/components/camel-context/src/test/java/org/apache/camel/component/context/SpringDslContextComponentTest.java ---------------------------------------------------------------------- diff --git a/components/camel-context/src/test/java/org/apache/camel/component/context/SpringDslContextComponentTest.java b/components/camel-context/src/test/java/org/apache/camel/component/context/SpringDslContextComponentTest.java index 65742d1..d986d5d 100644 --- a/components/camel-context/src/test/java/org/apache/camel/component/context/SpringDslContextComponentTest.java +++ b/components/camel-context/src/test/java/org/apache/camel/component/context/SpringDslContextComponentTest.java @@ -34,7 +34,7 @@ import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; @ContextConfiguration public class SpringDslContextComponentTest extends AbstractJUnit4SpringContextTests { - @EndpointInject(uri = "tester:results", context = "tester") + @EndpointInject(uri = "mock:results", context = "tester") private MockEndpoint resultEndpoint; @Produce(uri = "tester:start", context = "tester")