CAMEL-8545: camel-swagger-java to run outside servlet - work in progress
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/44a15c54 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/44a15c54 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/44a15c54 Branch: refs/heads/master Commit: 44a15c540f78858eb72e0679651dd92de727cf48 Parents: 9bd9e3e Author: Claus Ibsen <davscl...@apache.org> Authored: Wed Sep 23 09:19:37 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Sep 23 09:19:37 2015 +0200 ---------------------------------------------------------------------- .../netty/http/NettyHttpComponent.java | 22 +++++++++++++++-- .../component/servlet/ServletComponent.java | 23 ++++++++++++++++-- .../component/undertow/UndertowComponent.java | 25 +++++++++++++++++--- 3 files changed, 63 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/44a15c54/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java index 0e831f5..0ce17c6 100644 --- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java +++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java @@ -31,6 +31,7 @@ import org.apache.camel.component.netty.NettyServerBootstrapConfiguration; import org.apache.camel.component.netty.http.handlers.HttpServerMultiplexChannelHandler; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.spi.HeaderFilterStrategyAware; +import org.apache.camel.spi.RestApiConsumerFactory; import org.apache.camel.spi.RestConfiguration; import org.apache.camel.spi.RestConsumerFactory; import org.apache.camel.util.FileUtil; @@ -46,7 +47,7 @@ import org.slf4j.LoggerFactory; /** * Netty HTTP based component. */ -public class NettyHttpComponent extends NettyComponent implements HeaderFilterStrategyAware, RestConsumerFactory { +public class NettyHttpComponent extends NettyComponent implements HeaderFilterStrategyAware, RestConsumerFactory, RestApiConsumerFactory { private static final Logger LOG = LoggerFactory.getLogger(NettyHttpComponent.class); @@ -226,6 +227,18 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { + return doCreateConsumer(camelContext, processor, verb, basePath, uriTemplate, consumes, produces, configuration, parameters, false); + } + + @Override + public Consumer createApiConsumer(CamelContext camelContext, Processor processor, String contextPath, + RestConfiguration configuration, Map<String, Object> parameters) throws Exception { + // reuse the createConsumer method we already have. The api need to use GET and match on uri prefix + return doCreateConsumer(camelContext, processor, "GET", contextPath, null, null, null, configuration, parameters, true); + } + + Consumer doCreateConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters, boolean api) throws Exception { String path = basePath; if (uriTemplate != null) { @@ -278,7 +291,12 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt String query = URISupport.createQueryString(map); - String url = "netty-http:%s://%s:%s/%s?httpMethodRestrict=%s"; + String url; + if (api) { + url = "netty-http:%s://%s:%s/%s?matchOnUriPrefix=true&httpMethodRestrict=%s"; + } else { + url = "netty-http:%s://%s:%s/%s?httpMethodRestrict=%s"; + } // must use upper case for restrict String restrict = verb.toUpperCase(Locale.US); http://git-wip-us.apache.org/repos/asf/camel/blob/44a15c54/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java index c70f81d..9aa1300 100644 --- a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java +++ b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java @@ -29,13 +29,14 @@ import org.apache.camel.http.common.HttpBinding; import org.apache.camel.http.common.HttpCommonComponent; import org.apache.camel.http.common.HttpConsumer; import org.apache.camel.spi.HeaderFilterStrategy; +import org.apache.camel.spi.RestApiConsumerFactory; import org.apache.camel.spi.RestConfiguration; import org.apache.camel.spi.RestConsumerFactory; import org.apache.camel.util.FileUtil; import org.apache.camel.util.URISupport; import org.apache.camel.util.UnsafeUriCharactersEncoder; -public class ServletComponent extends HttpCommonComponent implements RestConsumerFactory { +public class ServletComponent extends HttpCommonComponent implements RestConsumerFactory, RestApiConsumerFactory { private String servletName = "CamelServlet"; private HttpRegistry httpRegistry; @@ -160,6 +161,19 @@ public class ServletComponent extends HttpCommonComponent implements RestConsume @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { + return doCreateConsumer(camelContext, processor, verb, basePath, uriTemplate, consumes, produces, configuration, parameters, false); + } + + @Override + public Consumer createApiConsumer(CamelContext camelContext, Processor processor, String contextPath, + RestConfiguration configuration, Map<String, Object> parameters) throws Exception { + // reuse the createConsumer method we already have. The api need to use GET and match on uri prefix + return doCreateConsumer(camelContext, processor, "GET", contextPath, null, null, null, configuration, parameters, true); + } + + Consumer doCreateConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters, boolean api) throws Exception { + String path = basePath; if (uriTemplate != null) { // make sure to avoid double slashes @@ -185,7 +199,12 @@ public class ServletComponent extends HttpCommonComponent implements RestConsume String query = URISupport.createQueryString(map); - String url = "servlet:///%s?httpMethodRestrict=%s"; + String url; + if (api) { + url = "servlet:///%s?matchOnUriPrefix=true&httpMethodRestrict=%s"; + } else { + url = "servlet:///%s?httpMethodRestrict=%s"; + } // must use upper case for restrict String restrict = verb.toUpperCase(Locale.US); http://git-wip-us.apache.org/repos/asf/camel/blob/44a15c54/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java index 8274b07..3584819 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java @@ -24,7 +24,6 @@ import java.util.Map; import io.undertow.Handlers; import io.undertow.Undertow; import io.undertow.server.handlers.PathHandler; - import org.apache.camel.CamelContext; import org.apache.camel.Consumer; import org.apache.camel.Endpoint; @@ -32,6 +31,7 @@ import org.apache.camel.Processor; import org.apache.camel.component.undertow.handlers.HttpCamelHandler; import org.apache.camel.component.undertow.handlers.NotFoundHandler; import org.apache.camel.impl.UriEndpointComponent; +import org.apache.camel.spi.RestApiConsumerFactory; import org.apache.camel.spi.RestConfiguration; import org.apache.camel.spi.RestConsumerFactory; import org.apache.camel.util.FileUtil; @@ -43,7 +43,7 @@ import org.slf4j.LoggerFactory; /** * Represents the component that manages {@link UndertowEndpoint}. */ -public class UndertowComponent extends UriEndpointComponent implements RestConsumerFactory { +public class UndertowComponent extends UriEndpointComponent implements RestConsumerFactory, RestApiConsumerFactory { private static final Logger LOG = LoggerFactory.getLogger(UndertowEndpoint.class); private UndertowHttpBinding undertowHttpBinding = new DefaultUndertowHttpBinding(); @@ -85,6 +85,18 @@ public class UndertowComponent extends UriEndpointComponent implements RestConsu @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { + return doCreateConsumer(camelContext, processor, verb, basePath, uriTemplate, consumes, produces, configuration, parameters, false); + } + + @Override + public Consumer createApiConsumer(CamelContext camelContext, Processor processor, String contextPath, + RestConfiguration configuration, Map<String, Object> parameters) throws Exception { + // reuse the createConsumer method we already have. The api need to use GET and match on uri prefix + return doCreateConsumer(camelContext, processor, "GET", contextPath, null, null, null, configuration, parameters, true); + } + + Consumer doCreateConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters, boolean api) throws Exception { String path = basePath; if (uriTemplate != null) { // make sure to avoid double slashes @@ -125,8 +137,15 @@ public class UndertowComponent extends UriEndpointComponent implements RestConsu String query = URISupport.createQueryString(map); - String url = "undertow:%s://%s:%s/%s"; + String url; + if (api) { + url = "undertow:%s://%s:%s/%s?matchOnUriPrefix=true"; + } else { + url = "undertow:%s://%s:%s/%s"; + } + url = String.format(url, scheme, host, port, path); + if (!query.isEmpty()) { url = url + "&" + query; }