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/24 11:05:15 UTC

[3/4] camel git commit: CAMEL-9156: Add JMX api for the swagger api

CAMEL-9156: Add JMX api for the swagger api


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e26541ac
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e26541ac
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e26541ac

Branch: refs/heads/master
Commit: e26541acb06d70563551341ba105b390d4084059
Parents: cac4ae2
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Sep 24 10:59:39 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Sep 24 10:59:39 2015 +0200

----------------------------------------------------------------------
 .../camel/component/rest/RestApiEndpoint.java   |  2 +
 .../camel/component/rest/RestEndpoint.java      |  2 +
 .../management/mbean/ManagedRestRegistry.java   | 73 +++++++++++---------
 .../swagger/SwaggerRestApiProcessorFactory.java |  4 +-
 4 files changed, 47 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e26541ac/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 7829a7c..f2ee48d 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
@@ -21,6 +21,7 @@ import java.util.Set;
 
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
+import org.apache.camel.ExchangePattern;
 import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.Processor;
@@ -57,6 +58,7 @@ public class RestApiEndpoint extends DefaultEndpoint {
 
     public RestApiEndpoint(String endpointUri, RestApiComponent component) {
         super(endpointUri, component);
+        setExchangePattern(ExchangePattern.InOut);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/e26541ac/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 a226d70..f17110d 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
@@ -21,6 +21,7 @@ import java.util.Set;
 
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
+import org.apache.camel.ExchangePattern;
 import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
@@ -62,6 +63,7 @@ public class RestEndpoint extends DefaultEndpoint {
 
     public RestEndpoint(String endpointUri, RestComponent component) {
         super(endpointUri, component);
+        setExchangePattern(ExchangePattern.InOut);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/e26541ac/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRestRegistry.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRestRegistry.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRestRegistry.java
index eca3508..cbcbcd6 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRestRegistry.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRestRegistry.java
@@ -33,6 +33,7 @@ import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes;
 import org.apache.camel.api.management.mbean.ManagedRestRegistryMBean;
 import org.apache.camel.component.rest.RestApiEndpoint;
 import org.apache.camel.component.rest.RestEndpoint;
+import org.apache.camel.impl.ProducerCache;
 import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.spi.RestRegistry;
 import org.apache.camel.util.ObjectHelper;
@@ -45,6 +46,7 @@ import org.apache.camel.util.ServiceHelper;
 public class ManagedRestRegistry extends ManagedService implements ManagedRestRegistryMBean {
 
     private final RestRegistry registry;
+    private transient Producer apiProducer;
 
     public ManagedRestRegistry(CamelContext context, RestRegistry registry) {
         super(context, registry);
@@ -94,48 +96,53 @@ public class ManagedRestRegistry extends ManagedService implements ManagedRestRe
     @Override
     public String apiDocAsJson() {
         // see if there is a rest-api endpoint which would be the case if rest api-doc has been explicit enabled
-        Endpoint restApiEndpoint = null;
-        Endpoint restEndpoint = null;
-        for (Map.Entry<String, Endpoint> entry : getContext().getEndpointMap().entrySet()) {
-            String uri = entry.getKey();
-            if (uri.startsWith("rest-api:")) {
-                restApiEndpoint = entry.getValue();
-                break;
-            } else if (restEndpoint == null && uri.startsWith("rest:")) {
-                restEndpoint = entry.getValue();
+        if (apiProducer == null) {
+            Endpoint restApiEndpoint = null;
+            Endpoint restEndpoint = null;
+            for (Map.Entry<String, Endpoint> entry : getContext().getEndpointMap().entrySet()) {
+                String uri = entry.getKey();
+                if (uri.startsWith("rest-api:")) {
+                    restApiEndpoint = entry.getValue();
+                    break;
+                } else if (restEndpoint == null && uri.startsWith("rest:")) {
+                    restEndpoint = entry.getValue();
+                }
             }
-        }
 
-        if (restApiEndpoint == null && restEndpoint != null) {
-            // no rest-api has been explicit enabled, then we need to create it first
-            RestEndpoint rest = (RestEndpoint) restEndpoint;
-            String componentName = rest.getComponentName();
+            if (restApiEndpoint == null && restEndpoint != null) {
+                // no rest-api has been explicit enabled, then we need to create it first
+                RestEndpoint rest = (RestEndpoint) restEndpoint;
+                String componentName = rest.getComponentName();
 
-            if (componentName != null) {
-                RestConfiguration config = getContext().getRestConfiguration(componentName, true);
-                String apiComponent = config.getApiComponent() != null ? config.getApiComponent() : RestApiEndpoint.DEFAULT_API_COMPONENT_NAME;
-                String path = config.getApiContextPath() != null ? config.getApiContextPath() : "api-doc";
-                restApiEndpoint = getContext().getEndpoint(String.format("rest-api:%s/%s?componentName=%s&apiComponentName=%s&contextIdPattern=#name#", path, getCamelId(), componentName, apiComponent));
+                if (componentName != null) {
+                    RestConfiguration config = getContext().getRestConfiguration(componentName, true);
+                    String apiComponent = config.getApiComponent() != null ? config.getApiComponent() : RestApiEndpoint.DEFAULT_API_COMPONENT_NAME;
+                    String path = config.getApiContextPath() != null ? config.getApiContextPath() : "api-doc";
+                    restApiEndpoint = getContext().getEndpoint(String.format("rest-api:%s/%s?componentName=%s&apiComponentName=%s&contextIdPattern=#name#", path, getCamelId(), componentName, apiComponent));
+                }
             }
-        }
 
-        try {
             if (restApiEndpoint != null) {
-                Producer producer = restApiEndpoint.createProducer();
-                ServiceHelper.startService(producer);
-
+                // reuse the producer to avoid creating it
                 try {
-                    Exchange dummy = restApiEndpoint.createExchange();
-                    producer.process(dummy);
-
-                    String json = dummy.hasOut() ? dummy.getOut().getBody(String.class) : dummy.getIn().getBody(String.class);
-                    return json;
-                } finally {
-                    ServiceHelper.stopService(producer);
+                    apiProducer = restApiEndpoint.createProducer();
+                    getContext().addService(apiProducer, true);
+                } catch (Exception e) {
+                    throw ObjectHelper.wrapRuntimeCamelException(e);
                 }
             }
-        } catch (Exception e) {
-            throw ObjectHelper.wrapRuntimeCamelException(e);
+        }
+
+        if (apiProducer != null) {
+            try {
+                Exchange dummy = apiProducer.getEndpoint().createExchange();
+                apiProducer.process(dummy);
+
+                String json = dummy.hasOut() ? dummy.getOut().getBody(String.class) : dummy.getIn().getBody(String.class);
+                return json;
+            } catch (Exception e) {
+                throw ObjectHelper.wrapRuntimeCamelException(e);
+            }
         }
 
         return null;

http://git-wip-us.apache.org/repos/asf/camel/blob/e26541ac/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 45eff06..373db45 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
@@ -31,7 +31,9 @@ public class SwaggerRestApiProcessorFactory implements RestApiProcessorFactory {
                                         RestConfiguration configuration, Map<String, Object> parameters) throws Exception {
 
         Map<String, Object> options = new HashMap<String, Object>(parameters);
-        options.putAll(configuration.getApiProperties());
+        if (configuration.getApiProperties() != null) {
+            options.putAll(configuration.getApiProperties());
+        }
 
         // need to include host in options
         String host = (String) options.get("host");