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/2a9dbacf Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2a9dbacf Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2a9dbacf Branch: refs/heads/master Commit: 2a9dbacff538e2e84458e347d48f7d6c5f9aae1c Parents: 065edda Author: Claus Ibsen <davscl...@apache.org> Authored: Wed Sep 23 13:37:25 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Sep 23 13:37:25 2015 +0200 ---------------------------------------------------------------------- .../camel/component/rest/RestApiEndpoint.java | 35 ++++++++++++++++++-- .../camel/component/rest/RestEndpoint.java | 1 - .../camel/swagger/RestSwaggerProcessor.java | 2 +- .../camel/swagger/RestSwaggerSupport.java | 5 +-- .../swagger/SwaggerRestApiProcessorFactory.java | 24 +++++++++++++- .../swagger/servlet/RestSwaggerServlet.java | 5 ++- 6 files changed, 64 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/2a9dbacf/camel-core/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java b/camel-core/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java index a5e7276..083034e 100644 --- a/camel-core/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java +++ b/camel-core/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java @@ -32,6 +32,8 @@ import org.apache.camel.spi.RestConfiguration; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriPath; +import org.apache.camel.util.HostUtils; +import org.apache.camel.util.ObjectHelper; @UriEndpoint(scheme = "rest-api", title = "REST API", syntax = "rest-api:path/contextId", consumerOnly = true, label = "core,rest") public class RestApiEndpoint extends DefaultEndpoint { @@ -141,7 +143,36 @@ public class RestApiEndpoint extends DefaultEndpoint { if (factory != null) { - // calculate the url to the rest API service + // if no explicit port/host configured, then use port from rest configuration + String scheme = "http"; + String host = ""; + int port = 80; + + if (config.getScheme() != null) { + scheme = config.getScheme(); + } + if (config.getHost() != null) { + host = config.getHost(); + } + int num = config.getPort(); + if (num > 0) { + port = num; + } + + // if no explicit hostname set then resolve the hostname + if (ObjectHelper.isEmpty(host)) { + if (config.getRestHostNameResolver() == RestConfiguration.RestHostNameResolver.localHostName) { + host = HostUtils.getLocalHostName(); + } else if (config.getRestHostNameResolver() == RestConfiguration.RestHostNameResolver.localIp) { + host = HostUtils.getLocalIp(); + } + + // no host was configured so calculate a host to use + String targetHost = scheme + "://" + host + (port != 80 ? ":" + port : ""); + getParameters().put("host", targetHost); + } + + // the base path should start with a leading slash String path = getPath(); if (path != null && !path.startsWith("/")) { path = "/" + path; @@ -203,7 +234,7 @@ public class RestApiEndpoint extends DefaultEndpoint { } if (factory != null) { - + // calculate the url to the rest API service RestConfiguration config = getCamelContext().getRestConfiguration(cname, true); // calculate the url to the rest API service http://git-wip-us.apache.org/repos/asf/camel/blob/2a9dbacf/camel-core/src/main/java/org/apache/camel/component/rest/RestEndpoint.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/component/rest/RestEndpoint.java b/camel-core/src/main/java/org/apache/camel/component/rest/RestEndpoint.java index cf22ef0..a226d70 100644 --- a/camel-core/src/main/java/org/apache/camel/component/rest/RestEndpoint.java +++ b/camel-core/src/main/java/org/apache/camel/component/rest/RestEndpoint.java @@ -271,7 +271,6 @@ public class RestEndpoint extends DefaultEndpoint { } } - // calculate the url to the rest service String path = getPath(); if (!path.startsWith("/")) { http://git-wip-us.apache.org/repos/asf/camel/blob/2a9dbacf/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerProcessor.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerProcessor.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerProcessor.java index a83fe25..fd04d87 100644 --- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerProcessor.java +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerProcessor.java @@ -83,7 +83,7 @@ public class RestSwaggerProcessor implements Processor { if (!match) { adapter.noContent(); } else { - support.renderResourceListing(adapter, swaggerConfig, name, route); + support.renderResourceListing(adapter, swaggerConfig, name, route, exchange.getContext().getClassResolver()); } } } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/camel/blob/2a9dbacf/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java index b3d33c3..873efc3 100644 --- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java @@ -38,6 +38,7 @@ import org.apache.camel.impl.DefaultClassResolver; import org.apache.camel.model.ModelHelper; import org.apache.camel.model.rest.RestDefinition; import org.apache.camel.model.rest.RestsDefinition; +import org.apache.camel.spi.ClassResolver; import org.apache.camel.util.CamelVersionHelper; import org.apache.camel.util.EndpointHelper; import org.slf4j.Logger; @@ -167,7 +168,7 @@ public class RestSwaggerSupport { return answer; } - public void renderResourceListing(RestApiResponseAdapter response, BeanConfig swaggerConfig, String contextId, String route) throws Exception { + public void renderResourceListing(RestApiResponseAdapter response, BeanConfig swaggerConfig, String contextId, String route, ClassResolver classResolver) throws Exception { LOG.trace("renderResourceListing"); if (cors) { @@ -179,7 +180,7 @@ public class RestSwaggerSupport { List<RestDefinition> rests = getRestDefinitions(contextId); if (rests != null) { // read the rest-dsl into swagger model - Swagger swagger = reader.read(rests, route, swaggerConfig, contextId, new DefaultClassResolver()); + Swagger swagger = reader.read(rests, route, swaggerConfig, contextId, classResolver); ObjectMapper mapper = new ObjectMapper(); mapper.enable(SerializationFeature.INDENT_OUTPUT); http://git-wip-us.apache.org/repos/asf/camel/blob/2a9dbacf/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestApiProcessorFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestApiProcessorFactory.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestApiProcessorFactory.java index be70c60..dba4f89 100644 --- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestApiProcessorFactory.java +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestApiProcessorFactory.java @@ -16,6 +16,7 @@ */ package org.apache.camel.swagger; +import java.util.HashMap; import java.util.Map; import org.apache.camel.CamelContext; @@ -28,6 +29,27 @@ public class SwaggerRestApiProcessorFactory implements RestApiProcessorFactory { @Override public Processor createApiProcessor(CamelContext camelContext, String contextPath, String contextIdPattern, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { - return new RestSwaggerProcessor(contextIdPattern, configuration.getApiProperties()); + + Map<String, Object> options = new HashMap<String, Object>(parameters); + options.putAll(configuration.getApiProperties()); + + // need to include host in options + String host = (String) options.get("host"); + if (host == null) { + host = configuration.getHost(); + int port = configuration.getPort(); + if (host != null && port > 0) { + options.put("host", host + ":" + port); + } else if (host != null) { + options.put("host", host); + } else { + options.put("host", "localhost"); + } + } + // and context path is the base.path + String path = configuration.getContextPath(); + options.put("base.path", path); + + return new RestSwaggerProcessor(contextIdPattern, options); } } http://git-wip-us.apache.org/repos/asf/camel/blob/2a9dbacf/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/RestSwaggerServlet.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/RestSwaggerServlet.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/RestSwaggerServlet.java index 345efc9..bcc64b5 100644 --- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/RestSwaggerServlet.java +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/RestSwaggerServlet.java @@ -29,6 +29,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import io.swagger.jaxrs.config.BeanConfig; +import org.apache.camel.impl.DefaultClassResolver; +import org.apache.camel.spi.ClassResolver; import org.apache.camel.swagger.RestApiResponseAdapter; import org.apache.camel.swagger.RestSwaggerSupport; import org.slf4j.Logger; @@ -47,6 +49,7 @@ public class RestSwaggerServlet extends HttpServlet { private BeanConfig swaggerConfig = new BeanConfig(); private RestSwaggerSupport swagger = new RestSwaggerSupport(); private volatile boolean initDone; + private final ClassResolver classResolver = new DefaultClassResolver(); @Override public void init(final ServletConfig config) throws ServletException { @@ -89,7 +92,7 @@ public class RestSwaggerServlet extends HttpServlet { route = route.substring(contextId.length()); } - swagger.renderResourceListing(adapter, swaggerConfig, contextId, route); + swagger.renderResourceListing(adapter, swaggerConfig, contextId, route, classResolver); } } catch (Exception e) { LOG.warn("Error rendering swagger due " + e.getMessage(), e);