CAMEL-8545: Use provided rest configuration and only fallback to default if none provided.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/bdbeb4a3 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/bdbeb4a3 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/bdbeb4a3 Branch: refs/heads/master Commit: bdbeb4a39a39984ca867bf8f7f78ec1fd49d4f6b Parents: 8252a16 Author: Claus Ibsen <davscl...@apache.org> Authored: Tue Sep 22 20:44:26 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Sep 23 07:51:05 2015 +0200 ---------------------------------------------------------------------- .../java/org/apache/camel/CamelContext.java | 4 +-- .../camel/component/rest/RestApiEndpoint.java | 8 ++--- .../camel/component/rest/RestEndpoint.java | 7 ++-- .../apache/camel/impl/DefaultCamelContext.java | 2 +- .../model/rest/RestConfigurationDefinition.java | 35 ++++++++++++++++++++ .../camel/spi/RestApiConsumerFactory.java | 4 +-- .../camel/spi/RestApiProcessorFactory.java | 3 +- .../org/apache/camel/spi/RestConfiguration.java | 14 ++++++++ .../apache/camel/spi/RestConsumerFactory.java | 2 +- .../rest/DummyRestConsumerFactory.java | 8 +++-- .../rest/DummyRestProcessorFactory.java | 6 ++-- .../org/apache/camel/coap/CoAPComponent.java | 14 +++++--- .../component/jetty/JettyHttpComponent.java | 11 +++--- .../netty/http/NettyHttpComponent.java | 12 ++++--- .../netty4/http/NettyHttpComponent.java | 20 ++++++----- .../netty4/http/rest/RestApiNettyTest.java | 5 ++- .../component/restlet/RestletComponent.java | 11 +++--- .../component/servlet/ServletComponent.java | 9 +++-- .../component/sparkrest/SparkComponent.java | 10 +++--- .../swagger/SwaggerRestApiProcessorFactory.java | 6 ++-- .../camel/swagger/DummyRestConsumerFactory.java | 3 +- .../swagger/DummyRestConsumerFactory.java | 3 +- .../rest/DummyRestConsumerFactory.java | 10 +++--- .../component/undertow/UndertowComponent.java | 10 ++++-- 24 files changed, 152 insertions(+), 65 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/camel-core/src/main/java/org/apache/camel/CamelContext.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/CamelContext.java b/camel-core/src/main/java/org/apache/camel/CamelContext.java index c820dff..9a1509a 100644 --- a/camel-core/src/main/java/org/apache/camel/CamelContext.java +++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java @@ -500,6 +500,7 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration { /** * Gets the REST configuration for the given component + * * @param component the component name to get the configuration * @param defaultIfNotFound determine if the default configuration is returned if there isn't a * specific configuration for the given component @@ -508,8 +509,7 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration { RestConfiguration getRestConfiguration(String component, boolean defaultIfNotFound); /** - * Gets all the RestConfigurations - * @return + * Gets all the RestConfiguration's */ Collection<RestConfiguration> getRestConfigurations(); http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/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 a4ff9f5..56fe965 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 @@ -100,14 +100,15 @@ public class RestApiEndpoint extends DefaultEndpoint { if (factory != null) { + RestConfiguration config = getCamelContext().getRestConfiguration(componentName, true); + // calculate the url to the rest API service String path = getPath(); if (path != null && !path.startsWith("/")) { path = "/" + path; } - - Processor processor = factory.createApiProcessor(getCamelContext(), path, getParameters()); + Processor processor = factory.createApiProcessor(getCamelContext(), path, config, getParameters()); return new RestApiProducer(this, processor); } else { throw new IllegalStateException("Cannot find RestApiProcessorFactory in Registry"); @@ -182,8 +183,7 @@ public class RestApiEndpoint extends DefaultEndpoint { } } */ - - Consumer consumer = factory.createApiConsumer(getCamelContext(), processor, path, getParameters()); + Consumer consumer = factory.createApiConsumer(getCamelContext(), processor, path, config, getParameters()); configureConsumer(consumer); return consumer; http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/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 adb5f49..cf22ef0 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 @@ -245,9 +245,6 @@ public class RestEndpoint extends DefaultEndpoint { } if (factory != null) { - Consumer consumer = factory.createConsumer(getCamelContext(), processor, getMethod(), getPath(), getUriTemplate(), getConsumes(), getProduces(), getParameters()); - configureConsumer(consumer); - // if no explicit port/host configured, then use port from rest configuration String scheme = "http"; String host = ""; @@ -305,6 +302,10 @@ public class RestEndpoint extends DefaultEndpoint { } } + Consumer consumer = factory.createConsumer(getCamelContext(), processor, getMethod(), getPath(), + getUriTemplate(), getConsumes(), getProduces(), config, getParameters()); + configureConsumer(consumer); + // add to rest registry so we can keep track of them, we will remove from the registry when the consumer is removed // the rest registry will automatic keep track when the consumer is removed, // and un-register the REST service from the registry http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java index 3cfa60e..1c5227f 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java @@ -2308,11 +2308,11 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon public void setRestConfiguration(RestConfiguration restConfiguration) { restConfigurations.put("", restConfiguration); } + public Collection<RestConfiguration> getRestConfigurations() { return restConfigurations.values(); } - public void addRestConfiguration(RestConfiguration restConfiguration) { restConfigurations.put(restConfiguration.getComponent(), restConfiguration); } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/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 1ed3239..2c5906d 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 @@ -87,6 +87,9 @@ public class RestConfigurationDefinition { @XmlElement(name = "dataFormatProperty") private List<RestPropertyDefinition> dataFormatProperties = new ArrayList<RestPropertyDefinition>(); + @XmlElement(name = "apiProperty") + private List<RestPropertyDefinition> apiProperties = new ArrayList<RestPropertyDefinition>(); + @XmlElement(name = "corsHeaders") private List<RestPropertyDefinition> corsHeaders = new ArrayList<RestPropertyDefinition>(); @@ -303,6 +306,18 @@ public class RestConfigurationDefinition { this.dataFormatProperties = dataFormatProperties; } + public List<RestPropertyDefinition> getApiProperties() { + return apiProperties; + } + + /** + * Allows to configure as many additional properties for the api documentation (swagger). + * For example set property api.title to my cool stuff + */ + public void setApiProperties(List<RestPropertyDefinition> apiProperties) { + this.apiProperties = apiProperties; + } + public List<RestPropertyDefinition> getCorsHeaders() { return corsHeaders; } @@ -480,6 +495,17 @@ public class RestConfigurationDefinition { } /** + * For additional configuration options on data format level + */ + public RestConfigurationDefinition apiProperty(String key, String value) { + RestPropertyDefinition prop = new RestPropertyDefinition(); + prop.setKey(key); + prop.setValue(value); + getApiProperties().add(prop); + return this; + } + + /** * For configuring CORS headers */ public RestConfigurationDefinition corsHeaderProperty(String key, String value) { @@ -574,6 +600,15 @@ public class RestConfigurationDefinition { } answer.setDataFormatProperties(props); } + if (!apiProperties.isEmpty()) { + Map<String, Object> props = new HashMap<String, Object>(); + for (RestPropertyDefinition prop : apiProperties) { + String key = prop.getKey(); + String value = CamelContextHelper.parseText(context, prop.getValue()); + props.put(key, value); + } + answer.setApiProperties(props); + } if (!corsHeaders.isEmpty()) { Map<String, String> props = new HashMap<String, String>(); for (RestPropertyDefinition prop : corsHeaders) { http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/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 acad9a8..c000d93 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 @@ -37,7 +37,7 @@ public interface RestApiConsumerFactory { * @return a newly created REST API consumer * @throws Exception can be thrown */ - Consumer createApiConsumer(CamelContext camelContext, Processor processor, String contextPath, Map<String, Object> parameters) throws Exception; - + Consumer createApiConsumer(CamelContext camelContext, Processor processor, String contextPath, + RestConfiguration configuration, Map<String, Object> parameters) throws Exception; } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/camel-core/src/main/java/org/apache/camel/spi/RestApiProcessorFactory.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/spi/RestApiProcessorFactory.java b/camel-core/src/main/java/org/apache/camel/spi/RestApiProcessorFactory.java index 6650213..a721ec5 100644 --- a/camel-core/src/main/java/org/apache/camel/spi/RestApiProcessorFactory.java +++ b/camel-core/src/main/java/org/apache/camel/spi/RestApiProcessorFactory.java @@ -35,6 +35,7 @@ public interface RestApiProcessorFactory { * @return a newly created REST API provider * @throws Exception can be thrown */ - Processor createApiProcessor(CamelContext camelContext, String contextPath, Map<String, Object> parameters) throws Exception; + Processor createApiProcessor(CamelContext camelContext, String contextPath, + RestConfiguration configuration, Map<String, Object> parameters) throws Exception; } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/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 7e5e3fe..768ad42 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 @@ -53,6 +53,7 @@ public class RestConfiguration { private Map<String, Object> endpointProperties; private Map<String, Object> consumerProperties; private Map<String, Object> dataFormatProperties; + private Map<String, Object> apiProperties; private Map<String, String> corsHeaders; /** @@ -378,6 +379,19 @@ public class RestConfiguration { this.dataFormatProperties = dataFormatProperties; } + public Map<String, Object> getApiProperties() { + return apiProperties; + } + + /** + * Sets additional options on api level + * + * @param apiProperties the options + */ + public void setApiProperties(Map<String, Object> apiProperties) { + this.apiProperties = apiProperties; + } + /** * Gets the CORS headers to use if CORS has been enabled. * http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/camel-core/src/main/java/org/apache/camel/spi/RestConsumerFactory.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/spi/RestConsumerFactory.java b/camel-core/src/main/java/org/apache/camel/spi/RestConsumerFactory.java index ac07fb7..26f51a3 100644 --- a/camel-core/src/main/java/org/apache/camel/spi/RestConsumerFactory.java +++ b/camel-core/src/main/java/org/apache/camel/spi/RestConsumerFactory.java @@ -41,5 +41,5 @@ public interface RestConsumerFactory { * @throws Exception can be thrown */ Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception; + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception; } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/camel-core/src/test/java/org/apache/camel/component/rest/DummyRestConsumerFactory.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/DummyRestConsumerFactory.java b/camel-core/src/test/java/org/apache/camel/component/rest/DummyRestConsumerFactory.java index d51d3d3..46572c8 100644 --- a/camel-core/src/test/java/org/apache/camel/component/rest/DummyRestConsumerFactory.java +++ b/camel-core/src/test/java/org/apache/camel/component/rest/DummyRestConsumerFactory.java @@ -24,13 +24,14 @@ import org.apache.camel.Processor; import org.apache.camel.component.seda.SedaEndpoint; import org.apache.camel.impl.ActiveMQUuidGenerator; import org.apache.camel.spi.RestApiConsumerFactory; +import org.apache.camel.spi.RestConfiguration; import org.apache.camel.spi.RestConsumerFactory; public class DummyRestConsumerFactory implements RestConsumerFactory, RestApiConsumerFactory { @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception { + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { // just use a seda endpoint for testing purpose String id; if (uriTemplate != null) { @@ -47,7 +48,8 @@ public class DummyRestConsumerFactory implements RestConsumerFactory, RestApiCon } @Override - public Consumer createApiConsumer(CamelContext camelContext, Processor processor, String contextPath, Map<String, Object> parameters) throws Exception { + public Consumer createApiConsumer(CamelContext camelContext, Processor processor, String contextPath, + RestConfiguration configuration, Map<String, Object> parameters) throws Exception { // just use a seda endpoint for testing purpose String id = ActiveMQUuidGenerator.generateSanitizedId(contextPath); // remove leading dash as we add that ourselves @@ -57,4 +59,6 @@ public class DummyRestConsumerFactory implements RestConsumerFactory, RestApiCon SedaEndpoint seda = camelContext.getEndpoint("seda:api:" + "-" + id, SedaEndpoint.class); return seda.createConsumer(processor); } + + } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/camel-core/src/test/java/org/apache/camel/component/rest/DummyRestProcessorFactory.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/DummyRestProcessorFactory.java b/camel-core/src/test/java/org/apache/camel/component/rest/DummyRestProcessorFactory.java index ecb8c6c..1fbe87f 100644 --- a/camel-core/src/test/java/org/apache/camel/component/rest/DummyRestProcessorFactory.java +++ b/camel-core/src/test/java/org/apache/camel/component/rest/DummyRestProcessorFactory.java @@ -22,17 +22,17 @@ import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.spi.RestApiProcessorFactory; +import org.apache.camel.spi.RestConfiguration; public class DummyRestProcessorFactory implements RestApiProcessorFactory { @Override - public Processor createApiProcessor(CamelContext camelContext, String contextPath, Map<String, Object> parameters) throws Exception { + public Processor createApiProcessor(CamelContext camelContext, String contextPath, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { return new Processor() { @Override public void process(Exchange exchange) throws Exception { - // noop; + // noop } }; } - } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java b/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java index 9ad4d42..32397f8 100644 --- a/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java +++ b/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java @@ -81,8 +81,14 @@ public class CoAPComponent extends UriEndpointComponent implements RestConsumerF String uriTemplate, String consumes, String produces, + RestConfiguration configuration, Map<String, Object> parameters) throws Exception { - RestConfiguration config = getCamelContext().getRestConfiguration("coap", true); + + RestConfiguration config = configuration; + if (config == null) { + config = getCamelContext().getRestConfiguration("coap", true); + } + Map<String, Object> map = new HashMap<String, Object>(); // setup endpoint options if (config.getEndpointProperties() != null && !config.getEndpointProperties().isEmpty()) { @@ -90,8 +96,7 @@ public class CoAPComponent extends UriEndpointComponent implements RestConsumerF } String query = URISupport.createQueryString(map); - - + String url = (config.getScheme() == null ? "coap" : config.getScheme()) + "://" + config.getHost(); if (config.getPort() != -1) { @@ -110,8 +115,7 @@ public class CoAPComponent extends UriEndpointComponent implements RestConsumerF setProperties(endpoint, parameters); return endpoint.createConsumer(processor); } - - + @Override protected void doStart() throws Exception { super.doStart(); http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java index 0a6c454..03b5d17 100644 --- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java +++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java @@ -1003,7 +1003,7 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception { + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { String path = basePath; if (uriTemplate != null) { @@ -1021,7 +1021,10 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements int port = 0; // if no explicit port/host configured, then use port from rest configuration - RestConfiguration config = getCamelContext().getRestConfiguration("jetty", true); + RestConfiguration config = configuration; + if (config == null) { + config = getCamelContext().getRestConfiguration("jetty", true); + } if (config.getScheme() != null) { scheme = config.getScheme(); } @@ -1044,7 +1047,7 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements Map<String, Object> map = new HashMap<String, Object>(); // build query string, and append any endpoint configuration properties - if (config != null && (config.getComponent() == null || config.getComponent().equals("jetty"))) { + if (config.getComponent() == null || config.getComponent().equals("jetty")) { // setup endpoint options if (config.getEndpointProperties() != null && !config.getEndpointProperties().isEmpty()) { map.putAll(config.getEndpointProperties()); @@ -1073,7 +1076,7 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements // configure consumer properties Consumer consumer = endpoint.createConsumer(processor); - if (config != null && config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { + if (config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { setProperties(consumer, config.getConsumerProperties()); } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java index 23b1460..0e831f5 100644 --- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java +++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java @@ -225,7 +225,7 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception { + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { String path = basePath; if (uriTemplate != null) { @@ -243,7 +243,10 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt int port = 0; // if no explicit port/host configured, then use port from rest configuration - RestConfiguration config = getCamelContext().getRestConfiguration("netty-http", true); + RestConfiguration config = configuration; + if (config == null) { + config = getCamelContext().getRestConfiguration("netty-http", true); + } if (config.getScheme() != null) { scheme = config.getScheme(); } @@ -266,7 +269,7 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt Map<String, Object> map = new HashMap<String, Object>(); // build query string, and append any endpoint configuration properties - if (config != null && (config.getComponent() == null || config.getComponent().equals("netty-http"))) { + if (config.getComponent() == null || config.getComponent().equals("netty-http")) { // setup endpoint options if (config.getEndpointProperties() != null && !config.getEndpointProperties().isEmpty()) { map.putAll(config.getEndpointProperties()); @@ -286,13 +289,12 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt url = url + "&" + query; } - NettyHttpEndpoint endpoint = camelContext.getEndpoint(url, NettyHttpEndpoint.class); setProperties(endpoint, parameters); // configure consumer properties Consumer consumer = endpoint.createConsumer(processor); - if (config != null && config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { + if (config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { setProperties(consumer, config.getConsumerProperties()); } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java index 71fe02e..ae8e78c 100644 --- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java +++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java @@ -225,18 +225,19 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception { - return doCreateConsumer(camelContext, processor, verb, basePath, uriTemplate, consumes, produces, parameters, false); + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { + return doCreateConsumer(camelContext, processor, verb, basePath, uriTemplate, consumes, produces, configuration, parameters, false); } @Override - public Consumer createApiConsumer(CamelContext camelContext, Processor processor, String contextPath, Map<String, Object> parameters) throws Exception { + public Consumer createApiConsumer(CamelContext camelContext, Processor processor, String contextPath, + RestConfiguration configuration, Map<String, Object> parameters) throws Exception { // reuse the createConsumer method we already have. The api need to use GET and match on uri prefix - return doCreateConsumer(camelContext, processor, "GET", contextPath, null, null, null, parameters, true); + return doCreateConsumer(camelContext, processor, "GET", contextPath, null, null, null, configuration, parameters, true); } Consumer doCreateConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters, boolean api) throws Exception { + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters, boolean api) throws Exception { String path = basePath; if (uriTemplate != null) { @@ -254,7 +255,10 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt int port = 0; // if no explicit port/host configured, then use port from rest configuration - RestConfiguration config = getCamelContext().getRestConfiguration("netty4-http", true); + RestConfiguration config = configuration; + if (config == null) { + config = getCamelContext().getRestConfiguration("netty4-http", true); + } if (config.getScheme() != null) { scheme = config.getScheme(); } @@ -277,7 +281,7 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt Map<String, Object> map = new HashMap<String, Object>(); // build query string, and append any endpoint configuration properties - if (config != null && (config.getComponent() == null || config.getComponent().equals("netty4-http"))) { + if (config.getComponent() == null || config.getComponent().equals("netty4-http")) { // setup endpoint options if (config.getEndpointProperties() != null && !config.getEndpointProperties().isEmpty()) { map.putAll(config.getEndpointProperties()); @@ -306,7 +310,7 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt // configure consumer properties Consumer consumer = endpoint.createConsumer(processor); - if (config != null && config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { + if (config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { setProperties(consumer, config.getConsumerProperties()); } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/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 2abf8f1..99d1665 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 @@ -50,6 +50,8 @@ public class RestApiNettyTest extends BaseNettyTest { assertNotNull(out); log.info(out); + assertTrue(out.contains("\"version\" : \"1.2.3\"")); + assertTrue(out.contains("\"title\" : \"The hello rest thing\"")); assertTrue(out.contains("\"/hello/bye/{name}\"")); assertTrue(out.contains("\"/hello/hi/{name}\"")); assertTrue(out.contains("\"summary\" : \"To update the greeting message\"")); @@ -60,7 +62,8 @@ public class RestApiNettyTest extends BaseNettyTest { return new RouteBuilder() { @Override public void configure() throws Exception { - restConfiguration().component("netty4-http").host("localhost").port(getPort()).apiContextPath("/api-doc"); + restConfiguration().component("netty4-http").host("localhost").port(getPort()).apiContextPath("/api-doc") + .apiProperty("cors", "true").apiProperty("api.title", "The hello rest thing").apiProperty("api.version", "1.2.3"); rest("/hello").consumes("application/json").produces("application/json") .get("/hi/{name}").description("Saying hi") http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java index 345d89d..9b91d90 100644 --- a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java +++ b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java @@ -664,7 +664,7 @@ public class RestletComponent extends HeaderFilterStrategyComponent implements R @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception { + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { String path = basePath; if (uriTemplate != null) { @@ -683,7 +683,10 @@ public class RestletComponent extends HeaderFilterStrategyComponent implements R int port = this.getPort(); // if no explicit port/host configured, then use port from rest configuration - RestConfiguration config = getCamelContext().getRestConfiguration("restlet", true); + RestConfiguration config = configuration; + if (config == null) { + config = getCamelContext().getRestConfiguration("restlet", true); + } if (config.getScheme() != null) { scheme = config.getScheme(); } @@ -706,7 +709,7 @@ public class RestletComponent extends HeaderFilterStrategyComponent implements R Map<String, Object> map = new HashMap<String, Object>(); // build query string, and append any endpoint configuration properties - if (config != null && (config.getComponent() == null || config.getComponent().equals("restlet"))) { + if (config.getComponent() == null || config.getComponent().equals("restlet")) { // setup endpoint options if (config.getEndpointProperties() != null && !config.getEndpointProperties().isEmpty()) { map.putAll(config.getEndpointProperties()); @@ -736,7 +739,7 @@ public class RestletComponent extends HeaderFilterStrategyComponent implements R // configure consumer properties Consumer consumer = endpoint.createConsumer(processor); - if (config != null && config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { + if (config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { setProperties(consumer, config.getConsumerProperties()); } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java index 1d573a8..c70f81d 100644 --- a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java +++ b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java @@ -159,7 +159,7 @@ public class ServletComponent extends HttpCommonComponent implements RestConsume @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception { + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { String path = basePath; if (uriTemplate != null) { // make sure to avoid double slashes @@ -172,7 +172,10 @@ public class ServletComponent extends HttpCommonComponent implements RestConsume path = FileUtil.stripLeadingSeparator(path); // if no explicit port/host configured, then use port from rest configuration - RestConfiguration config = getCamelContext().getRestConfiguration("servlet", true); + RestConfiguration config = configuration; + if (config == null) { + config = getCamelContext().getRestConfiguration("servlet", true); + } Map<String, Object> map = new HashMap<String, Object>(); // setup endpoint options @@ -204,7 +207,7 @@ public class ServletComponent extends HttpCommonComponent implements RestConsume // configure consumer properties Consumer consumer = endpoint.createConsumer(processor); - if (config != null && config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { + if (config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { setProperties(consumer, config.getConsumerProperties()); } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkComponent.java b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkComponent.java index eb5cba8..826db58 100644 --- a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkComponent.java +++ b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkComponent.java @@ -31,7 +31,6 @@ import org.apache.camel.spi.RestConsumerFactory; import org.apache.camel.util.FileUtil; import org.apache.camel.util.ObjectHelper; import org.apache.camel.util.URISupport; -import spark.Spark; import spark.SparkBase; public class SparkComponent extends UriEndpointComponent implements RestConsumerFactory { @@ -147,7 +146,7 @@ public class SparkComponent extends UriEndpointComponent implements RestConsumer @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception { + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { String path = basePath; if (uriTemplate != null) { @@ -174,7 +173,10 @@ public class SparkComponent extends UriEndpointComponent implements RestConsumer } // build query string, and append any endpoint configuration properties - RestConfiguration config = getCamelContext().getRestConfiguration("spark-rest", true); + RestConfiguration config = configuration; + if (config == null) { + config = getCamelContext().getRestConfiguration("spark-rest", true); + } // setup endpoint options if (config.getEndpointProperties() != null && !config.getEndpointProperties().isEmpty()) { map.putAll(config.getEndpointProperties()); @@ -193,7 +195,7 @@ public class SparkComponent extends UriEndpointComponent implements RestConsumer // configure consumer properties Consumer consumer = endpoint.createConsumer(processor); - if (config != null && config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { + if (config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { setProperties(consumer, config.getConsumerProperties()); } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/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 19cd1a7..faba694 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 @@ -21,11 +21,13 @@ import java.util.Map; import org.apache.camel.CamelContext; import org.apache.camel.Processor; import org.apache.camel.spi.RestApiProcessorFactory; +import org.apache.camel.spi.RestConfiguration; public class SwaggerRestApiProcessorFactory implements RestApiProcessorFactory { @Override - public Processor createApiProcessor(CamelContext camelContext, String contextPath, Map<String, Object> parameters) throws Exception { - return new RestSwaggerProcessor(parameters); + public Processor createApiProcessor(CamelContext camelContext, String contextPath, + RestConfiguration configuration, Map<String, Object> parameters) throws Exception { + return new RestSwaggerProcessor(configuration.getApiProperties()); } } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/DummyRestConsumerFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/DummyRestConsumerFactory.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/DummyRestConsumerFactory.java index d0d6efe..9946c4d 100644 --- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/DummyRestConsumerFactory.java +++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/DummyRestConsumerFactory.java @@ -23,13 +23,14 @@ import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.component.seda.SedaEndpoint; import org.apache.camel.impl.ActiveMQUuidGenerator; +import org.apache.camel.spi.RestConfiguration; import org.apache.camel.spi.RestConsumerFactory; public class DummyRestConsumerFactory implements RestConsumerFactory { @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception { + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { // just use a seda endpoint for testing purpose String id; if (uriTemplate != null) { http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/components/camel-swagger/src/test/java/org/apache/camel/component/swagger/DummyRestConsumerFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger/src/test/java/org/apache/camel/component/swagger/DummyRestConsumerFactory.java b/components/camel-swagger/src/test/java/org/apache/camel/component/swagger/DummyRestConsumerFactory.java index eed969e..3392332 100644 --- a/components/camel-swagger/src/test/java/org/apache/camel/component/swagger/DummyRestConsumerFactory.java +++ b/components/camel-swagger/src/test/java/org/apache/camel/component/swagger/DummyRestConsumerFactory.java @@ -23,13 +23,14 @@ import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.component.seda.SedaEndpoint; import org.apache.camel.impl.ActiveMQUuidGenerator; +import org.apache.camel.spi.RestConfiguration; import org.apache.camel.spi.RestConsumerFactory; public class DummyRestConsumerFactory implements RestConsumerFactory { @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception { + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { // just use a seda endpoint for testing purpose String id; if (uriTemplate != null) { http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/DummyRestConsumerFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/DummyRestConsumerFactory.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/DummyRestConsumerFactory.java index c87fae5..2236b10 100644 --- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/DummyRestConsumerFactory.java +++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/DummyRestConsumerFactory.java @@ -23,19 +23,20 @@ import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.component.seda.SedaEndpoint; import org.apache.camel.impl.ActiveMQUuidGenerator; +import org.apache.camel.spi.RestConfiguration; import org.apache.camel.spi.RestConsumerFactory; public class DummyRestConsumerFactory implements RestConsumerFactory { @Override - public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String path, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception { + public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { // just use a seda endpoint for testing purpose String id; if (uriTemplate != null) { - id = ActiveMQUuidGenerator.generateSanitizedId(path + uriTemplate); + id = ActiveMQUuidGenerator.generateSanitizedId(basePath + uriTemplate); } else { - id = ActiveMQUuidGenerator.generateSanitizedId(path); + id = ActiveMQUuidGenerator.generateSanitizedId(basePath); } // remove leading dash as we add that ourselves if (id.startsWith("-")) { @@ -44,5 +45,4 @@ public class DummyRestConsumerFactory implements RestConsumerFactory { SedaEndpoint seda = camelContext.getEndpoint("seda:" + verb + "-" + id, SedaEndpoint.class); return seda.createConsumer(processor); } - } http://git-wip-us.apache.org/repos/asf/camel/blob/bdbeb4a3/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java index 01b9684..8274b07 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java @@ -84,7 +84,7 @@ public class UndertowComponent extends UriEndpointComponent implements RestConsu @Override public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, - String consumes, String produces, Map<String, Object> parameters) throws Exception { + String consumes, String produces, RestConfiguration configuration, Map<String, Object> parameters) throws Exception { String path = basePath; if (uriTemplate != null) { // make sure to avoid double slashes @@ -98,7 +98,11 @@ public class UndertowComponent extends UriEndpointComponent implements RestConsu String scheme = "http"; String host = ""; int port = 0; - RestConfiguration config = getCamelContext().getRestConfiguration("undertow", true); + + RestConfiguration config = configuration; + if (config == null) { + config = getCamelContext().getRestConfiguration("undertow", true); + } if (config.getScheme() != null) { scheme = config.getScheme(); } @@ -112,7 +116,7 @@ public class UndertowComponent extends UriEndpointComponent implements RestConsu Map<String, Object> map = new HashMap<String, Object>(); // build query string, and append any endpoint configuration properties - if (config != null && (config.getComponent() == null || config.getComponent().equals("undertow"))) { + if (config.getComponent() == null || config.getComponent().equals("undertow")) { // setup endpoint options if (config.getEndpointProperties() != null && !config.getEndpointProperties().isEmpty()) { map.putAll(config.getEndpointProperties());