You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/09/23 13:35:57 UTC

[2/2] camel git commit: CAMEL-8545: camel-swagger-java to run outside servlet - work in progress

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 <da...@apache.org>
Authored: Wed Sep 23 13:37:25 2015 +0200
Committer: Claus Ibsen <da...@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);