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 11:35:45 UTC
[09/16] 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/26ae7724
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/26ae7724
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/26ae7724
Branch: refs/heads/master
Commit: 26ae7724e1877645b1e36c7c3575760e0f83120a
Parents: bdbeb4a
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Sep 22 21:14:50 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Sep 23 07:51:05 2015 +0200
----------------------------------------------------------------------
.../camel/component/rest/RestApiEndpoint.java | 39 ++++++++++++++++++--
.../model/rest/RestConfigurationDefinition.java | 25 +++++++++++++
.../camel/spi/RestApiConsumerFactory.java | 2 +
.../org/apache/camel/spi/RestConfiguration.java | 19 ++++++++++
.../netty4/http/rest/RestApiNettyTest.java | 9 -----
.../services/org/apache/camel/component/sql | 18 ---------
.../services/org/apache/camel/rest/swagger | 18 +++++++++
7 files changed, 100 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/26ae7724/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 56fe965..7ceb16b 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
@@ -16,15 +16,18 @@
*/
package org.apache.camel.component.rest;
+import java.io.IOException;
import java.util.Map;
import java.util.Set;
+import org.apache.camel.CamelContext;
import org.apache.camel.Component;
import org.apache.camel.Consumer;
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;
@@ -36,10 +39,15 @@ import org.apache.camel.spi.UriPath;
@UriEndpoint(scheme = "rest-api", title = "REST API", syntax = "rest-api:path", consumerOnly = true, label = "core,rest")
public class RestApiEndpoint extends DefaultEndpoint {
+ public static final String RESOURCE_PATH = "META-INF/services/org/apache/camel/rest/";
+ private FactoryFinder factoryFinder;
+
@UriPath @Metadata(required = "true")
private String path;
@UriParam
private String componentName;
+ @UriParam
+ private String apiComponentName;
private Map<String, Object> parameters;
@@ -77,6 +85,17 @@ public class RestApiEndpoint extends DefaultEndpoint {
this.componentName = componentName;
}
+ public String getApiComponentName() {
+ return apiComponentName;
+ }
+
+ /**
+ * The Camel Rest API component to use for generating the API of the REST services, such as swagger.
+ */
+ public void setApiComponentName(String apiComponentName) {
+ this.apiComponentName = apiComponentName;
+ }
+
public Map<String, Object> getParameters() {
return parameters;
}
@@ -88,19 +107,33 @@ public class RestApiEndpoint extends DefaultEndpoint {
this.parameters = parameters;
}
+ private Class<?> findApiProcessorFactory(String name, CamelContext context) throws ClassNotFoundException, IOException {
+ if (factoryFinder == null) {
+ factoryFinder = context.getFactoryFinder(RESOURCE_PATH);
+ }
+ return factoryFinder.findClass(name);
+ }
+
@Override
public Producer createProducer() throws Exception {
RestApiProcessorFactory factory = null;
+ RestConfiguration config = getCamelContext().getRestConfiguration(componentName, true);
+
// lookup in registry
Set<RestApiProcessorFactory> factories = getCamelContext().getRegistry().findByType(RestApiProcessorFactory.class);
if (factories != null && factories.size() == 1) {
factory = factories.iterator().next();
}
- if (factory != null) {
+ // lookup on classpath using factory finder
+ String name = apiComponentName != null ? apiComponentName : config.getApiComponent();
+ Object instance = getCamelContext().getFactoryFinder(RESOURCE_PATH).newInstance(name);
+ if (instance instanceof RestApiProcessorFactory) {
+ factory = (RestApiProcessorFactory) instance;
+ }
- RestConfiguration config = getCamelContext().getRestConfiguration(componentName, true);
+ if (factory != null) {
// calculate the url to the rest API service
String path = getPath();
@@ -111,7 +144,7 @@ public class RestApiEndpoint extends DefaultEndpoint {
Processor processor = factory.createApiProcessor(getCamelContext(), path, config, getParameters());
return new RestApiProducer(this, processor);
} else {
- throw new IllegalStateException("Cannot find RestApiProcessorFactory in Registry");
+ throw new IllegalStateException("Cannot find RestApiProcessorFactory in Registry or classpath");
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/26ae7724/camel-core/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java
index 2c5906d..90a6138 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java
@@ -42,6 +42,9 @@ public class RestConfigurationDefinition {
@XmlAttribute
private String component;
+ @XmlAttribute @Metadata(defaultValue = "swagger")
+ private String apiComponent;
+
@XmlAttribute
private String scheme;
@@ -107,6 +110,17 @@ public class RestConfigurationDefinition {
this.component = component;
}
+ public String getApiComponent() {
+ return apiComponent;
+ }
+
+ /**
+ * The name of the Camel component to use as the REST API (such as swagger)
+ */
+ public void setApiComponent(String apiComponent) {
+ this.apiComponent = apiComponent;
+ }
+
public String getScheme() {
return scheme;
}
@@ -341,6 +355,14 @@ public class RestConfigurationDefinition {
}
/**
+ * To use a specific Camel rest API component
+ */
+ public RestConfigurationDefinition apiComponent(String componentId) {
+ setApiComponent(componentId);
+ return this;
+ }
+
+ /**
* To use a specific scheme such as http/https
*/
public RestConfigurationDefinition scheme(String scheme) {
@@ -531,6 +553,9 @@ public class RestConfigurationDefinition {
if (component != null) {
answer.setComponent(CamelContextHelper.parseText(context, component));
}
+ if (apiComponent != null) {
+ answer.setApiComponent(CamelContextHelper.parseText(context, apiComponent));
+ }
if (scheme != null) {
answer.setScheme(CamelContextHelper.parseText(context, scheme));
}
http://git-wip-us.apache.org/repos/asf/camel/blob/26ae7724/camel-core/src/main/java/org/apache/camel/spi/RestApiConsumerFactory.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/RestApiConsumerFactory.java b/camel-core/src/main/java/org/apache/camel/spi/RestApiConsumerFactory.java
index c000d93..b051f29 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/RestApiConsumerFactory.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/RestApiConsumerFactory.java
@@ -24,6 +24,8 @@ import org.apache.camel.Processor;
public interface RestApiConsumerFactory {
+ // TODO: merge this method to RestConsumerFactory
+
/**
* Creates a new REST API <a
* href="http://camel.apache.org/event-driven-consumer.html">Event
http://git-wip-us.apache.org/repos/asf/camel/blob/26ae7724/camel-core/src/main/java/org/apache/camel/spi/RestConfiguration.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/RestConfiguration.java b/camel-core/src/main/java/org/apache/camel/spi/RestConfiguration.java
index 768ad42..55a45d6 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/RestConfiguration.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/RestConfiguration.java
@@ -38,6 +38,7 @@ public class RestConfiguration {
}
private String component;
+ private String apiComponent;
private String scheme;
private String host;
private int port;
@@ -75,6 +76,24 @@ public class RestConfiguration {
}
/**
+ * Gets the name of the Camel component to use as the REST API (such as swagger)
+ *
+ * @return the component name, or <tt>null</tt> to let Camel use the default name <tt>swagger</tt>
+ */
+ public String getApiComponent() {
+ return apiComponent;
+ }
+
+ /**
+ * Sets the name of the Camel component to use as the REST API (such as swagger)
+ *
+ * @param apiComponent the name of the component (such as swagger)
+ */
+ public void setApiComponent(String apiComponent) {
+ this.apiComponent = apiComponent;
+ }
+
+ /**
* Gets the hostname to use by the REST consumer
*
* @return the hostname, or <tt>null</tt> to use default hostname
http://git-wip-us.apache.org/repos/asf/camel/blob/26ae7724/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/rest/RestApiNettyTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/rest/RestApiNettyTest.java b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/rest/RestApiNettyTest.java
index 99d1665..41c22dc 100644
--- a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/rest/RestApiNettyTest.java
+++ b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/rest/RestApiNettyTest.java
@@ -18,21 +18,12 @@ package org.apache.camel.component.netty4.http.rest;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.netty4.http.BaseNettyTest;
-import org.apache.camel.impl.JndiRegistry;
import org.apache.camel.model.rest.RestParamType;
-import org.apache.camel.swagger.SwaggerRestApiProcessorFactory;
import org.junit.Test;
public class RestApiNettyTest extends BaseNettyTest {
@Override
- protected JndiRegistry createRegistry() throws Exception {
- JndiRegistry jndi = super.createRegistry();
- jndi.bind("SwaggerRestApiProcessorFactory", new SwaggerRestApiProcessorFactory());
- return jndi;
- }
-
- @Override
protected boolean useJmx() {
return true;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/26ae7724/components/camel-sql/src/main/resources/META-INF/services/org/apache/camel/component/sql
----------------------------------------------------------------------
diff --git a/components/camel-sql/src/main/resources/META-INF/services/org/apache/camel/component/sql b/components/camel-sql/src/main/resources/META-INF/services/org/apache/camel/component/sql
deleted file mode 100755
index 3b9a254..0000000
--- a/components/camel-sql/src/main/resources/META-INF/services/org/apache/camel/component/sql
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-class=org.apache.camel.component.sql.SqlComponent
http://git-wip-us.apache.org/repos/asf/camel/blob/26ae7724/components/camel-swagger-java/src/main/resources/META-INF/services/org/apache/camel/rest/swagger
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/resources/META-INF/services/org/apache/camel/rest/swagger b/components/camel-swagger-java/src/main/resources/META-INF/services/org/apache/camel/rest/swagger
new file mode 100755
index 0000000..999809c
--- /dev/null
+++ b/components/camel-swagger-java/src/main/resources/META-INF/services/org/apache/camel/rest/swagger
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+class=org.apache.camel.swagger.SwaggerRestApiProcessorFactory