CAMEL-10797: Create endpoint from uri without context-path
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4bb7dcb6 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4bb7dcb6 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4bb7dcb6 Branch: refs/heads/mention Commit: 4bb7dcb615c5e3eaf252012eab6df85b0861d57e Parents: 01204f8 Author: Claus Ibsen <davscl...@apache.org> Authored: Tue Feb 7 13:27:05 2017 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Feb 7 13:58:58 2017 +0100 ---------------------------------------------------------------------- .../apache/camel/impl/DefaultCamelContext.java | 27 ++++++++++++++++++++ .../org/apache/camel/impl/DefaultComponent.java | 9 ++++++- .../camel/impl/DefaultCamelContextTest.java | 11 ++++++-- 3 files changed, 44 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/4bb7dcb6/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java index 67f77ea..707366d 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java @@ -628,6 +628,33 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon log.trace("No component to create endpoint from uri: {} fallback lookup in registry -> {}", uri, answer); } + if (answer == null && splitURI[1] == null) { + // the uri has no context-path which is rare and it was not referring to an endpoint in the registry + // so try to see if it can be created by a component + + int pos = uri.indexOf('?'); + String componentName = pos > 0 ? uri.substring(0, pos) : uri; + + Component component = getComponent(componentName); + + // Ask the component to resolve the endpoint. + if (component != null) { + log.trace("Creating endpoint from uri: {} using component: {}", uri, component); + + // Have the component create the endpoint if it can. + if (component.useRawUri()) { + answer = component.createEndpoint(rawUri); + } else { + answer = component.createEndpoint(uri); + } + + if (answer != null && log.isDebugEnabled()) { + log.debug("{} converted to endpoint: {} by component: {}", new Object[]{URISupport.sanitizeUri(uri), answer, component}); + } + } + + } + if (answer != null) { addService(answer); answer = addEndpointToRegistry(uri, answer); http://git-wip-us.apache.org/repos/asf/camel/blob/4bb7dcb6/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java index a2c18b9..7b5b31e 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java @@ -65,7 +65,14 @@ public abstract class DefaultComponent extends ServiceSupport implements Compone // check URI string to the unsafe URI characters String encodedUri = preProcessUri(uri); URI u = new URI(encodedUri); - String path = URISupport.extractRemainderPath(u, useRawUri()); + String path; + if (u.getScheme() != null) { + // if there is a scheme then there is also a path + path = URISupport.extractRemainderPath(u, useRawUri()); + } else { + // this uri has no context-path as the leading text is the component name (scheme) + path = null; + } Map<String, Object> parameters; if (useRawUri()) { http://git-wip-us.apache.org/repos/asf/camel/blob/4bb7dcb6/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java index b0fc1c4..4a8e84b 100644 --- a/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java +++ b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java @@ -111,6 +111,13 @@ public class DefaultCamelContextTest extends TestSupport { } } + public void testGetEndpointNoScheme() throws Exception { + DefaultCamelContext ctx = new DefaultCamelContext(); + ctx.disableJMX(); + Endpoint endpoint = ctx.getEndpoint("log"); + assertNotNull(endpoint); + } + public void testGetEndPointByTypeUnknown() { DefaultCamelContext camelContext = new DefaultCamelContext(); try { @@ -159,11 +166,11 @@ public class DefaultCamelContextTest extends TestSupport { } } - public void testGetEndpointNoScheme() throws Exception { + public void testGetEndpointUnknownComponentNoScheme() throws Exception { DefaultCamelContext ctx = new DefaultCamelContext(); ctx.disableJMX(); try { - CamelContextHelper.getMandatoryEndpoint(ctx, "log.foo"); + CamelContextHelper.getMandatoryEndpoint(ctx, "unknownname"); fail("Should have thrown a NoSuchEndpointException"); } catch (NoSuchEndpointException e) { // expected