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/cac4ae2d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cac4ae2d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cac4ae2d Branch: refs/heads/master Commit: cac4ae2d086e2994015a0a0eae4e2ab1712061d2 Parents: 35b59f1 Author: Claus Ibsen <davscl...@apache.org> Authored: Thu Sep 24 10:24:15 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Sep 24 10:24:15 2015 +0200 ---------------------------------------------------------------------- .../camel/component/rest/RestApiEndpoint.java | 18 ++++++++---- .../management/mbean/ManagedRestRegistry.java | 31 ++++++++++++++++---- 2 files changed, 38 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/cac4ae2d/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 2ce98f7..7829a7c 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,10 +21,12 @@ import java.util.Set; import org.apache.camel.Component; import org.apache.camel.Consumer; +import org.apache.camel.NoFactoryAvailableException; import org.apache.camel.NoSuchBeanException; import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.impl.DefaultEndpoint; +import org.apache.camel.spi.FactoryFinder; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.RestApiConsumerFactory; import org.apache.camel.spi.RestApiProcessorFactory; @@ -41,7 +43,8 @@ public class RestApiEndpoint extends DefaultEndpoint { public static final String DEFAULT_API_COMPONENT_NAME = "swagger"; public static final String RESOURCE_PATH = "META-INF/services/org/apache/camel/rest/"; - @UriPath @Metadata(required = "true") + @UriPath + @Metadata(required = "true") private String path; @UriPath private String contextIdPattern; @@ -137,9 +140,14 @@ public class RestApiEndpoint extends DefaultEndpoint { if (name == null) { name = DEFAULT_API_COMPONENT_NAME; } - Object instance = getCamelContext().getFactoryFinder(RESOURCE_PATH).newInstance(name); - if (instance instanceof RestApiProcessorFactory) { - factory = (RestApiProcessorFactory) instance; + try { + FactoryFinder finder = getCamelContext().getFactoryFinder(RESOURCE_PATH); + Object instance = finder.newInstance(name); + if (instance instanceof RestApiProcessorFactory) { + factory = (RestApiProcessorFactory) instance; + } + } catch (NoFactoryAvailableException e) { + // ignore } } @@ -183,7 +191,7 @@ public class RestApiEndpoint extends DefaultEndpoint { Processor processor = factory.createApiProcessor(getCamelContext(), path, getContextIdPattern(), contextIdListing, config, getParameters()); return new RestApiProducer(this, processor); } else { - throw new IllegalStateException("Cannot find RestApiProcessorFactory in Registry or classpath"); + throw new IllegalStateException("Cannot find RestApiProcessorFactory in Registry or classpath (such as the camel-swagger-java component)"); } } http://git-wip-us.apache.org/repos/asf/camel/blob/cac4ae2d/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 e9e5f7c..eca3508 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 @@ -31,6 +31,9 @@ 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.component.rest.RestApiEndpoint; +import org.apache.camel.component.rest.RestEndpoint; +import org.apache.camel.spi.RestConfiguration; import org.apache.camel.spi.RestRegistry; import org.apache.camel.util.ObjectHelper; import org.apache.camel.util.ServiceHelper; @@ -91,22 +94,38 @@ 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 found = 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")) { - found = entry.getValue(); + 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 (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 (found != null) { - Producer producer = found.createProducer(); + if (restApiEndpoint != null) { + Producer producer = restApiEndpoint.createProducer(); ServiceHelper.startService(producer); try { - Exchange dummy = found.createExchange(); + Exchange dummy = restApiEndpoint.createExchange(); producer.process(dummy); String json = dummy.hasOut() ? dummy.getOut().getBody(String.class) : dummy.getIn().getBody(String.class);