Repository: camel
Updated Branches:
  refs/heads/master 6dc937a00 -> 3ba805987


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/35b59f13
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/35b59f13
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/35b59f13

Branch: refs/heads/master
Commit: 35b59f1370781d858d7a0c468d5a8482055c2107
Parents: 6dc937a
Author: Claus Ibsen <davscl...@apache.org>
Authored: Thu Sep 24 10:11:14 2015 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Thu Sep 24 10:11:14 2015 +0200

----------------------------------------------------------------------
 .../mbean/ManagedRestRegistryMBean.java         |  3 ++
 .../management/mbean/ManagedRestRegistry.java   | 40 ++++++++++++++++++++
 .../management/ManagedRestRegistryTest.java     |  4 ++
 3 files changed, 47 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/35b59f13/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRestRegistryMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRestRegistryMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRestRegistryMBean.java
index 804d294..1153b40 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRestRegistryMBean.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRestRegistryMBean.java
@@ -29,4 +29,7 @@ public interface ManagedRestRegistryMBean extends 
ManagedServiceMBean {
     @ManagedOperation(description = "Lists all the Rest services in the 
registry (url, path, verb, consumes, produces)")
     TabularData listRestServices();
 
+    @ManagedOperation(description = "Outputs the Rest services API 
documentation in JSon (requires camel-swagger-java on classpath)")
+    String apiDocAsJson();
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/35b59f13/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 244182e..e9e5f7c 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
@@ -17,6 +17,7 @@
 package org.apache.camel.management.mbean;
 
 import java.util.List;
+import java.util.Map;
 import javax.management.openmbean.CompositeData;
 import javax.management.openmbean.CompositeDataSupport;
 import javax.management.openmbean.CompositeType;
@@ -24,11 +25,15 @@ import javax.management.openmbean.TabularData;
 import javax.management.openmbean.TabularDataSupport;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Producer;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes;
 import org.apache.camel.api.management.mbean.ManagedRestRegistryMBean;
 import org.apache.camel.spi.RestRegistry;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.ServiceHelper;
 
 /**
  *
@@ -82,4 +87,39 @@ public class ManagedRestRegistry extends ManagedService 
implements ManagedRestRe
             throw ObjectHelper.wrapRuntimeCamelException(e);
         }
     }
+
+    @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 found = null;
+        for (Map.Entry<String, Endpoint> entry : 
getContext().getEndpointMap().entrySet()) {
+            String uri = entry.getKey();
+            if (uri.startsWith("rest-api")) {
+                found = entry.getValue();
+                break;
+            }
+        }
+
+        try {
+            if (found != null) {
+                Producer producer = found.createProducer();
+                ServiceHelper.startService(producer);
+
+                try {
+                    Exchange dummy = found.createExchange();
+                    producer.process(dummy);
+
+                    String json = dummy.hasOut() ? 
dummy.getOut().getBody(String.class) : dummy.getIn().getBody(String.class);
+                    return json;
+                } finally {
+                    ServiceHelper.stopService(producer);
+                }
+            }
+        } catch (Exception e) {
+            throw ObjectHelper.wrapRuntimeCamelException(e);
+        }
+
+        return null;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/35b59f13/camel-core/src/test/java/org/apache/camel/management/ManagedRestRegistryTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/management/ManagedRestRegistryTest.java
 
b/camel-core/src/test/java/org/apache/camel/management/ManagedRestRegistryTest.java
index a6976be..5f07d8c 100644
--- 
a/camel-core/src/test/java/org/apache/camel/management/ManagedRestRegistryTest.java
+++ 
b/camel-core/src/test/java/org/apache/camel/management/ManagedRestRegistryTest.java
@@ -64,6 +64,10 @@ public class ManagedRestRegistryTest extends 
ManagementTestSupport {
         TabularData data = (TabularData) mbeanServer.invoke(name, 
"listRestServices", null, null);
         assertEquals(3, data.size());
 
+        // should not be enabled as api-doc is not enabled or 
camel-swagger-java is not on classpath
+        String json = (String) mbeanServer.invoke(name, "apiDocAsJson", null, 
null);
+        assertNull(json);
+
         // remove all routes
         for (Route route : context.getRoutes()) {
             context.stopRoute(route.getId());

Reply via email to