You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2020/03/18 12:30:44 UTC
[camel] 01/03: CAMEL-13844 RestConfiguration - Make it simpler and
only have one
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit c4aadb30a12a204d33fd75007d8cbbd353912c69
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Tue Mar 17 11:55:04 2020 +0100
CAMEL-13844 RestConfiguration - Make it simpler and only have one
---
components/camel-coap/pom.xml | 5 --
.../java/org/apache/camel/coap/CoAPComponent.java | 3 +-
.../camel/coap/CoAPRestComponentTestBase.java | 2 +-
.../apache/camel/coap/CoAPRestContextPathTest.java | 2 +-
.../apache/camel/component/http/HttpComponent.java | 9 +-
.../camel/component/jetty/JettyHttpComponent.java | 17 ++--
.../jetty/rest/RestHttpsClientAuthRouteTest.java | 2 +-
.../rest/RestJettyRemoveAddRestAndRouteTest.java | 2 +-
.../component/netty/http/NettyHttpComponent.java | 19 ++---
.../camel/openapi/OpenApiRestProducerFactory.java | 24 +++---
.../platform/http/PlatformHttpComponent.java | 7 +-
.../rest/openapi/RestOpenApiEndpoint.java | 97 +++++++++-------------
.../rest/openapi/RestOpenApiEndpointTest.java | 23 ++---
.../rest/openapi/RestOpenApiEndpointV3Test.java | 33 +++-----
.../rest/swagger/RestSwaggerEndpoint.java | 29 ++-----
.../rest/swagger/RestSwaggerEndpointTest.java | 11 +--
.../camel/component/rest/DefaultRestRegistry.java | 18 ++--
.../camel/component/rest/RestApiComponent.java | 2 +-
.../camel/component/rest/RestApiEndpoint.java | 13 +--
.../apache/camel/component/rest/RestComponent.java | 81 +-----------------
.../apache/camel/component/rest/RestEndpoint.java | 14 ++--
.../camel/component/servlet/ServletComponent.java | 12 +--
.../component/sparkrest/SparkRestComponent.java | 17 ++--
.../camel/swagger/SwaggerRestProducerFactory.java | 8 +-
.../component/undertow/UndertowComponent.java | 25 +++---
.../camel/component/webhook/WebhookComponent.java | 4 +-
.../main/java/org/apache/camel/CamelContext.java | 30 +------
.../org/apache/camel/spi/RestConfiguration.java | 4 +-
.../camel/impl/engine/AbstractCamelContext.java | 53 +++++-------
.../org/apache/camel/builder/RouteBuilder.java | 72 ++++++----------
.../camel/impl/lw/ImmutableCamelContext.java | 17 ----
.../impl/lw/RuntimeImmutableCamelContext.java | 15 ----
.../org/apache/camel/model/rest/RestConstants.java | 24 ------
.../apache/camel/model/rest/RestDefinition.java | 23 ++---
.../camel/reifier/rest/RestBindingReifier.java | 3 +-
.../core/xml/AbstractCamelContextFactoryBean.java | 32 +++----
.../apache/camel/support/CamelContextHelper.java | 49 +++++++++++
37 files changed, 295 insertions(+), 506 deletions(-)
diff --git a/components/camel-coap/pom.xml b/components/camel-coap/pom.xml
index 48bb71f..7cfd9f3 100644
--- a/components/camel-coap/pom.xml
+++ b/components/camel-coap/pom.xml
@@ -79,11 +79,6 @@
<artifactId>camel-test</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-jetty</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
</project>
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 cb4a5bb..43018a5 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
@@ -33,6 +33,7 @@ import org.apache.camel.Processor;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestConsumerFactory;
import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultComponent;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.HostUtils;
@@ -136,7 +137,7 @@ public class CoAPComponent extends DefaultComponent implements RestConsumerFacto
RestConfiguration config = configuration;
if (config == null) {
- config = camelContext.getRestConfiguration("coap", true);
+ config = CamelContextHelper.getRestConfiguration(getCamelContext(), "coap");
}
if (config.isEnableCORS()) {
diff --git a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTestBase.java b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTestBase.java
index 228cd12..9ed224d 100644
--- a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTestBase.java
+++ b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTestBase.java
@@ -123,7 +123,7 @@ abstract class CoAPRestComponentTestBase extends CamelTestSupport {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- RestConfigurationDefinition restConfig = restConfiguration("coap").scheme(getProtocol()).host("localhost").port(coapport);
+ RestConfigurationDefinition restConfig = restConfiguration().scheme(getProtocol()).host("localhost").port(coapport);
decorateRestConfiguration(restConfig);
rest("/TestParams").get().to("direct:get1").post().to("direct:post1");
diff --git a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestContextPathTest.java b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestContextPathTest.java
index b82c9b7..6156411 100644
--- a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestContextPathTest.java
+++ b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestContextPathTest.java
@@ -37,7 +37,7 @@ public class CoAPRestContextPathTest extends CoAPTestSupport {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- restConfiguration("coap").host("localhost").port(PORT).contextPath("/rest/services");
+ restConfiguration().host("localhost").port(PORT).contextPath("/rest/services");
rest("/test").get("/a").route().setBody(constant("GET: /test/a"));
}
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
index d1de045..df1db14 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
@@ -43,6 +43,7 @@ import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestProducerFactory;
import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.PropertyBindingSupport;
import org.apache.camel.support.RestProducerFactoryHelper;
import org.apache.camel.support.jsse.SSLContextParameters;
@@ -428,13 +429,7 @@ public class HttpComponent extends HttpCommonComponent implements RestProducerFa
RestConfiguration config = configuration;
if (config == null) {
- config = camelContext.getRestConfiguration("http", false);
- if (config == null) {
- camelContext.getRestConfiguration();
- }
- if (config == null) {
- config = camelContext.getRestConfiguration("http", true);
- }
+ config = CamelContextHelper.getRestConfiguration(getCamelContext(), "http");
}
Map<String, Object> map = new HashMap<>();
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 eac20722..55da1ea 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
@@ -57,6 +57,7 @@ import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.RestApiConsumerFactory;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestConsumerFactory;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.RestComponentHelper;
import org.apache.camel.support.jsse.SSLContextParameters;
import org.apache.camel.support.service.ServiceHelper;
@@ -1048,8 +1049,9 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements
// if no explicit port/host configured, then use port from rest configuration
RestConfiguration config = configuration;
if (config == null) {
- config = camelContext.getRestConfiguration("jetty", true);
+ config = CamelContextHelper.getRestConfiguration(getCamelContext(), "jetty");
}
+
if (config.getScheme() != null) {
scheme = config.getScheme();
}
@@ -1083,11 +1085,11 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements
// allow HTTP Options as we want to handle CORS in rest-dsl
map.put("optionsEnabled", "true");
}
-
+
if (api) {
map.put("matchOnUriPrefix", "true");
}
-
+
RestComponentHelper.addHttpRestrictParam(map, verb, cors);
String url = RestComponentHelper.createRestConsumerUrl("jetty", scheme, host, port, path, map);
@@ -1126,16 +1128,16 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements
holder.setAsyncSupported(true);
holder.setInitParameter(CamelServlet.ASYNC_PARAM, Boolean.toString(endpoint.isAsync()));
context.addServlet(holder, "/*");
-
+
File file = File.createTempFile("camel", "");
file.delete();
-
+
//must register the MultipartConfig to make jetty server multipart aware
holder.getRegistration().setMultipartConfig(new MultipartConfigElement(file.getParentFile().getAbsolutePath(), -1, -1, 0));
// use rest enabled resolver in case we use rest
camelServlet.setServletResolveConsumerStrategy(new HttpRestServletResolveConsumerStrategy());
-
+
//must make RFC7578 as default to avoid using the deprecated MultiPartInputStreamParser
connector.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration()
.setMultiPartFormDataCompliance(MultiPartFormDataCompliance.RFC7578);
@@ -1245,7 +1247,8 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements
protected void doStart() throws Exception {
super.doStart();
- RestConfiguration config = getCamelContext().getRestConfiguration("jetty", true);
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), "jetty");
+
// configure additional options on jetty configuration
if (config.getComponentProperties() != null && !config.getComponentProperties().isEmpty()) {
setProperties(this, config.getComponentProperties());
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/rest/RestHttpsClientAuthRouteTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/rest/RestHttpsClientAuthRouteTest.java
index 7c5038e..c889e63 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/rest/RestHttpsClientAuthRouteTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/rest/RestHttpsClientAuthRouteTest.java
@@ -94,7 +94,7 @@ public class RestHttpsClientAuthRouteTest extends CamelTestSupport {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- RestConfigurationDefinition restConfig = restConfiguration("jetty").scheme("https").host("localhost").port(port);
+ RestConfigurationDefinition restConfig = restConfiguration().scheme("https").host("localhost").port(port);
decorateRestConfiguration(restConfig);
rest("/TestParams").get().to("direct:get1").post().to("direct:post1");
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/rest/RestJettyRemoveAddRestAndRouteTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/rest/RestJettyRemoveAddRestAndRouteTest.java
index 5207f82..481795b 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/rest/RestJettyRemoveAddRestAndRouteTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/rest/RestJettyRemoveAddRestAndRouteTest.java
@@ -70,7 +70,7 @@ public class RestJettyRemoveAddRestAndRouteTest extends BaseJettyTest {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- restConfiguration("jetty").host("localhost").port(getPort());
+ restConfiguration().host("localhost").port(getPort());
rest("/").get("/issues/{isin}").route().id("issues").process(e -> e.getOut().setBody("Here's your issue " + e.getIn().getHeader("isin"))).endRest().get("/listings")
.route().id("listings").process(e -> e.getOut().setBody("some listings"));
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 3fb0272..92eb4ed 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
@@ -40,6 +40,7 @@ import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestConsumerFactory;
import org.apache.camel.spi.RestProducerFactory;
import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.PropertyBindingSupport;
import org.apache.camel.support.RestComponentHelper;
import org.apache.camel.support.RestProducerFactoryHelper;
@@ -351,7 +352,7 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
// if no explicit port/host configured, then use port from rest configuration
RestConfiguration config = configuration;
if (config == null) {
- config = camelContext.getRestConfiguration("netty-http", true);
+ config = CamelContextHelper.getRestConfiguration(getCamelContext(), "netty-http");
}
if (config.getScheme() != null) {
scheme = config.getScheme();
@@ -383,11 +384,11 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
// allow HTTP Options as we want to handle CORS in rest-dsl
boolean cors = config.isEnableCORS();
-
+
if (api) {
map.put("matchOnUriPrefix", "true");
}
-
+
RestComponentHelper.addHttpRestrictParam(map, verb, cors);
String url = RestComponentHelper.createRestConsumerUrl("netty-http", scheme, host, port, path, map);
@@ -404,6 +405,7 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
return consumer;
}
+ @SuppressWarnings("unchecked")
@Override
public Producer createProducer(CamelContext camelContext, String host,
String verb, String basePath, String uriTemplate, String queryParameters,
@@ -422,13 +424,7 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
url += "/" + uriTemplate;
}
- RestConfiguration config = getCamelContext().getRestConfiguration("netty-http", false);
- if (config == null) {
- config = getCamelContext().getRestConfiguration();
- }
- if (config == null) {
- config = getCamelContext().getRestConfiguration("netty-http", true);
- }
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), "netty-http");
Map<String, Object> map = new HashMap<>();
// build query string, and append any endpoint configuration properties
@@ -471,7 +467,8 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
protected void doStart() throws Exception {
super.doStart();
- RestConfiguration config = getCamelContext().getRestConfiguration("netty-http", true);
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), "netty-http");
+
// configure additional options on netty-http configuration
if (config.getComponentProperties() != null && !config.getComponentProperties().isEmpty()) {
setProperties(this, config.getComponentProperties());
diff --git a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/OpenApiRestProducerFactory.java b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/OpenApiRestProducerFactory.java
index 1cf1c3b..9047db1 100644
--- a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/OpenApiRestProducerFactory.java
+++ b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/OpenApiRestProducerFactory.java
@@ -37,6 +37,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.Producer;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestProducerFactory;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.util.CollectionStringBuffer;
import org.apache.camel.util.IOHelper;
import org.slf4j.Logger;
@@ -100,13 +101,13 @@ public class OpenApiRestProducerFactory implements RestProducerFactory {
final JsonNode node = mapper.readTree(is);
LOG.debug("Loaded openApi api-doc:\n{}", node.toPrettyString());
return (OasDocument)Library.readDocument(node);
-
-
+
+
} finally {
IOHelper.close(is);
}
-
-
+
+
}
private OasOperation getOpenApiOperation(OasDocument openApi, String verb, String path) {
@@ -166,7 +167,7 @@ public class OpenApiRestProducerFactory implements RestProducerFactory {
list.add(ct);
}
}
-
+
}
if (list == null || list.isEmpty()) {
if (openApi instanceof Oas20Document) {
@@ -187,13 +188,13 @@ public class OpenApiRestProducerFactory implements RestProducerFactory {
list = ((Oas20Operation)operation).consumes;
} else if (operation instanceof Oas30Operation) {
Oas30Operation oas30Operation = (Oas30Operation)operation;
- if (oas30Operation.requestBody != null
- && oas30Operation.requestBody.content != null) {
+ if (oas30Operation.requestBody != null
+ && oas30Operation.requestBody.content != null) {
for (String ct : oas30Operation.requestBody.content.keySet()) {
list.add(ct);
}
}
-
+
}
if (list == null || list.isEmpty()) {
if (openApi instanceof Oas20Document) {
@@ -211,18 +212,19 @@ public class OpenApiRestProducerFactory implements RestProducerFactory {
String basePath = null;
String uriTemplate = null;
if (host == null) {
-
+
//if no explicit host has been configured then use host and base path from the openApi api-doc
host = RestOpenApiSupport.getHostFromOasDocument(openApi);
basePath = RestOpenApiSupport.getBasePathFromOasDocument(openApi);
uriTemplate = path;
-
+
} else {
// path includes also uri template
basePath = path;
uriTemplate = null;
}
- RestConfiguration config = camelContext.getRestConfiguration(componentName, true);
+
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(camelContext, componentName);
return factory.createProducer(camelContext, host, verb, basePath, uriTemplate, queryParameters, consumes, produces, config, parameters);
} else {
diff --git a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpComponent.java b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpComponent.java
index 47229bd..cd37c62 100644
--- a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpComponent.java
+++ b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpComponent.java
@@ -28,6 +28,7 @@ import org.apache.camel.spi.RestApiConsumerFactory;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestConsumerFactory;
import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultComponent;
import org.apache.camel.support.RestComponentHelper;
import org.apache.camel.util.FileUtil;
@@ -103,7 +104,7 @@ public class PlatformHttpComponent extends DefaultComponent implements RestConsu
// if no explicit port/host configured, then use port from rest configuration
RestConfiguration config = configuration;
if (config == null) {
- config = camelContext.getRestConfiguration(PlatformHttpConstants.PLATFORM_HTTP_COMPONENT_NAME, true);
+ config = CamelContextHelper.getRestConfiguration(getCamelContext(), PlatformHttpConstants.PLATFORM_HTTP_COMPONENT_NAME);
}
Map<String, Object> map = RestComponentHelper.initRestEndpointProperties(PlatformHttpConstants.PLATFORM_HTTP_COMPONENT_NAME, config);
@@ -113,11 +114,11 @@ public class PlatformHttpComponent extends DefaultComponent implements RestConsu
// allow HTTP Options as we want to handle CORS in rest-dsl
map.put("optionsEnabled", "true");
}
-
+
if (api) {
map.put("matchOnUriPrefix", "true");
}
-
+
RestComponentHelper.addHttpRestrictParam(map, verb, cors);
// do not append with context-path as the servlet path should be without context-path
diff --git a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java
index 9bcdfa2..9ec2282 100644
--- a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java
+++ b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java
@@ -36,6 +36,8 @@ import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import static java.util.Optional.ofNullable;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.apicurio.datamodels.Library;
@@ -69,13 +71,13 @@ import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultEndpoint;
import org.apache.camel.support.ResourceHelper;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
import org.apache.camel.util.UnsafeUriCharactersEncoder;
-import static java.util.Optional.ofNullable;
import static org.apache.camel.component.rest.openapi.RestOpenApiHelper.isHostParam;
import static org.apache.camel.component.rest.openapi.RestOpenApiHelper.isMediaRange;
import static org.apache.camel.util.ObjectHelper.isNotEmpty;
@@ -208,8 +210,8 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
}
}
-
-
+
+
String supportedOperations = paths.getItems().stream().flatMap(p -> getOperationMap(p).values().stream())
.map(p -> p.operationId).collect(Collectors.joining(", "));
throw new IllegalArgumentException("The specified operation with ID: `" + operationId
@@ -217,7 +219,7 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
+ "`. Operations defined in the specification are: " + supportedOperations);
}
-
+
private Map<HttpMethod, OasOperation> getOperationMap(OasPathItem path) {
Map<HttpMethod, OasOperation> result = new LinkedHashMap<HttpMethod, OasOperation>();
@@ -314,13 +316,11 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
Producer createProducerFor(final Document openapi, final OasOperation operation, final String method,
final String uriTemplate) throws Exception {
final String basePath = determineBasePath(openapi);
-
- final StringBuilder componentEndpointUri = new StringBuilder(200).append("rest:").append(method).append(":")
- .append(basePath).append(":").append(uriTemplate);
+ final String componentEndpointUri = "rest:" + method + ":" + basePath + ":" + uriTemplate;
final CamelContext camelContext = getCamelContext();
- final Endpoint endpoint = camelContext.getEndpoint(componentEndpointUri.toString());
+ final Endpoint endpoint = camelContext.getEndpoint(componentEndpointUri);
Map<String, Object> params = determineEndpointParameters(openapi, operation);
boolean hasHost = params.containsKey("host");
@@ -343,32 +343,28 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
}
final String specificationBasePath = getBasePathFromOasDocument((OasDocument)openapi);
-
+
if (isNotEmpty(specificationBasePath)) {
return specificationBasePath;
}
final CamelContext camelContext = getCamelContext();
- final RestConfiguration specificConfiguration = camelContext.getRestConfiguration(assignedComponentName, false);
- if (specificConfiguration != null && isNotEmpty(specificConfiguration.getContextPath())) {
- return specificConfiguration.getContextPath();
- }
-
- final RestConfiguration restConfiguration = camelContext.getRestConfiguration("rest-openapi", true);
+ final RestConfiguration restConfiguration = CamelContextHelper.getRestConfiguration(camelContext, assignedComponentName);
final String restConfigurationBasePath = restConfiguration.getContextPath();
+
if (isNotEmpty(restConfigurationBasePath)) {
return restConfigurationBasePath;
}
return RestOpenApiComponent.DEFAULT_BASE_PATH;
}
-
+
public static String getBasePathFromOasDocument(final OasDocument openapi) {
String basePath = null;
if (openapi instanceof Oas20Document) {
basePath = ((Oas20Document)openapi).basePath;
} else if (openapi instanceof Oas30Document) {
- if (((Oas30Document)openapi).getServers() != null
+ if (((Oas30Document)openapi).getServers() != null
&& ((Oas30Document)openapi).getServers().get(0) != null) {
try {
Oas30Server server = (Oas30Server)((Oas30Document)openapi).getServers().get(0);
@@ -386,24 +382,24 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
if ("/".equals(basePath)) {
basePath = "";
}
- }
-
+ }
+
} catch (MalformedURLException e) {
//not a valid whole url, just the basePath
basePath = ((Oas30Document)openapi).getServers().get(0).url;
}
}
-
+
}
return basePath;
-
+
}
-
+
public static String parseVariables(String url, Oas30Server server) {
Pattern p = Pattern.compile("\\{(.*?)\\}");
Matcher m = p.matcher(url);
while (m.find()) {
-
+
String var = m.group(1);
if (server != null && server.variables != null && server.variables.get(var) != null) {
String varValue = server.variables.get(var).default_;
@@ -437,7 +433,7 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
List<String> specificationLevelConsumers = new ArrayList<String>();
if (openapi instanceof Oas20Document) {
specificationLevelConsumers = ((Oas20Document)openapi).produces;
- }
+ }
List<String> operationLevelConsumers = new ArrayList<String>();
if (operation instanceof Oas20Operation) {
operationLevelConsumers = ((Oas20Operation)operation).produces;
@@ -461,25 +457,25 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
// what we produce is what the API defined by OpenApi specification
// consumes
-
+
List<String> specificationLevelProducers = new ArrayList<String>();
if (openapi instanceof Oas20Document) {
specificationLevelProducers = ((Oas20Document)openapi).consumes;
- }
+ }
List<String> operationLevelProducers = new ArrayList<String>();
if (operation instanceof Oas20Operation) {
operationLevelProducers = ((Oas20Operation)operation).consumes;
} else if (operation instanceof Oas30Operation) {
Oas30Operation oas30Operation = (Oas30Operation)operation;
- if (oas30Operation.requestBody != null
- && oas30Operation.requestBody.content != null) {
+ if (oas30Operation.requestBody != null
+ && oas30Operation.requestBody.content != null) {
for (String ct : oas30Operation.requestBody.content.keySet()) {
operationLevelProducers.add(ct);
}
}
-
+
}
-
+
final String determinedProducers = determineOption(specificationLevelProducers, operationLevelProducers,
component.getProduces(), produces);
@@ -527,8 +523,8 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
return componentHost;
}
-
-
+
+
if (openapi instanceof Oas20Document) {
final String openapiScheme = pickBestScheme(specificationUri.getScheme(), ((Oas20Document)openapi).schemes);
final String openapiHost = ((Oas20Document)openapi).host;
@@ -541,10 +537,10 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
//But there could be many servers url(like one for production and one for test)
//Use first one here
Oas30Document oas30Document = (Oas30Document)openapi;
- if (oas30Document.getServers() != null
+ if (oas30Document.getServers() != null
&& oas30Document.getServers().get(0) != null) {
try {
-
+
URL serverUrl = new URL(parseVariables(oas30Document.getServers().get(0).url, (Oas30Server)oas30Document.getServers().get(0)));
final String openapiScheme = serverUrl.getProtocol();
final String openapiHost = serverUrl.getHost();
@@ -558,22 +554,9 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
}
final CamelContext camelContext = getCamelContext();
-
- final RestConfiguration specificRestConfiguration = camelContext.getRestConfiguration(assignedComponentName,
- false);
- final String specificConfigurationHost = hostFrom(specificRestConfiguration);
- if (specificConfigurationHost != null) {
- return specificConfigurationHost;
- }
-
- final RestConfiguration componentRestConfiguration = camelContext.getRestConfiguration("rest-openapi", false);
- final String componentConfigurationHost = hostFrom(componentRestConfiguration);
- if (componentConfigurationHost != null) {
- return componentConfigurationHost;
- }
-
- final RestConfiguration globalRestConfiguration = camelContext.getRestConfiguration();
+ final RestConfiguration globalRestConfiguration = CamelContextHelper.getRestConfiguration(camelContext, assignedComponentName);
final String globalConfigurationHost = hostFrom(globalRestConfiguration);
+
if (globalConfigurationHost != null) {
return globalConfigurationHost;
}
@@ -695,12 +678,12 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
if (openapi instanceof Oas20Document) {
Oas20Document oas20Document = (Oas20Document)openapi;
Oas20SecurityDefinitions securityDefinitions = oas20Document.securityDefinitions;
-
+
for (final SecurityRequirement securityRequirement : securityRequirements) {
for (final String securityRequirementName : securityRequirement.getSecurityRequirementNames()) {
final Oas20SecurityScheme securitySchemeDefinition = securityDefinitions
.getSecurityScheme(securityRequirementName);
- if (securitySchemeDefinition.in != null
+ if (securitySchemeDefinition.in != null
&& securitySchemeDefinition.in.equals("query")) {
Oas20Parameter securityParameter = new Oas20Parameter(securitySchemeDefinition.name);
securityParameter.required = true;
@@ -708,7 +691,7 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
securityParameter.description = securitySchemeDefinition.description;
apiKeyQueryParameters.add(securityParameter);
}
-
+
}
}
} else if (openapi instanceof Oas30Document) {
@@ -723,13 +706,13 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
securityParameter.description = securitySchemeDefinition.description;
apiKeyQueryParameters.add(securityParameter);
}
-
+
}
}
} else {
throw new IllegalStateException("We only support OpenApi 2.0 or 3.0 document here");
}
-
+
}
if (operation.getParameters() != null) {
@@ -775,7 +758,7 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
static Document loadSpecificationFrom(final CamelContext camelContext, final URI uri) throws IOException {
final ObjectMapper mapper = new ObjectMapper();
-
+
final String uriAsString = uri.toString();
try (InputStream stream = ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext, uriAsString)) {
@@ -783,7 +766,7 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
return Library.readDocument(node);
} catch (final Exception e) {
-
+
throw new IllegalArgumentException("The given OpenApi specification could not be loaded from `" + uri
+ "`. Tried loading using Camel's resource resolution and using OpenApi's own resource resolution."
+ " OpenApi tends to swallow exceptions while parsing, try specifying Java system property `debugParser`"
@@ -823,7 +806,7 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
return expression.toString();
}
-
+
enum HttpMethod {
POST,
GET,
diff --git a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointTest.java b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointTest.java
index d57bf28..755f0dc 100644
--- a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointTest.java
+++ b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointTest.java
@@ -86,7 +86,7 @@ public class RestOpenApiEndpointTest {
final RestConfiguration restConfiguration = new RestConfiguration();
final CamelContext camelContext = mock(CamelContext.class);
- when(camelContext.getRestConfiguration("rest-openapi", true)).thenReturn(restConfiguration);
+ when(camelContext.getRestConfiguration()).thenReturn(restConfiguration);
final Oas20Document openapi = new Oas20Document();
@@ -136,7 +136,7 @@ public class RestOpenApiEndpointTest {
operation.createParameter();
assertThat(endpoint.determineEndpointParameters(openapi, operation))
.containsOnly(entry("host", "http://petstore.openapi.io"));
-
+
component.setComponentName("xyz");
assertThat(endpoint.determineEndpointParameters(openapi, operation))
@@ -148,7 +148,7 @@ public class RestOpenApiEndpointTest {
produces.add("application/xml");
openapi.consumes = consumers;
openapi.produces = produces;
-
+
assertThat(endpoint.determineEndpointParameters(openapi, operation)).containsOnly(
entry("host", "http://petstore.openapi.io"), entry("producerComponentName", "xyz"),
entry("consumes", "application/xml"), entry("produces", "application/json"));
@@ -280,14 +280,9 @@ public class RestOpenApiEndpointTest {
@Test
public void shouldHonourHostPrecedence() {
final RestConfiguration globalRestConfiguration = new RestConfiguration();
-
- final RestConfiguration componentRestConfiguration = new RestConfiguration();
- final RestConfiguration specificRestConfiguration = new RestConfiguration();
-
final CamelContext camelContext = mock(CamelContext.class);
+
when(camelContext.getRestConfiguration()).thenReturn(globalRestConfiguration);
- when(camelContext.getRestConfiguration("rest-openapi", false)).thenReturn(componentRestConfiguration);
- when(camelContext.getRestConfiguration("petstore", false)).thenReturn(specificRestConfiguration);
final RestOpenApiComponent component = new RestOpenApiComponent();
component.setCamelContext(camelContext);
@@ -306,10 +301,6 @@ public class RestOpenApiEndpointTest {
globalRestConfiguration.setScheme("http");
assertThat(endpoint.determineHost(openapi)).isEqualTo("http://component-rest");
- specificRestConfiguration.setHost("specific-rest");
- specificRestConfiguration.setScheme("http");
- assertThat(endpoint.determineHost(openapi)).isEqualTo("http://specific-rest");
-
openapi.host = "specification";
openapi.schemes = Arrays.asList("http");
assertThat(endpoint.determineHost(openapi)).isEqualTo("http://specification");
@@ -338,7 +329,7 @@ public class RestOpenApiEndpointTest {
apiKeys.in = "header";
openapi.securityDefinitions = openapi.createSecurityDefinitions();
openapi.securityDefinitions.addItem("apiKeys", apiKeys);
-
+
final Oas20Operation operation = new Oas20Operation("get");
Oas20Parameter oas20Parameter = new Oas20Parameter("q");
oas20Parameter.in = "query";
@@ -347,8 +338,8 @@ public class RestOpenApiEndpointTest {
SecurityRequirement securityRequirement = operation.createSecurityRequirement();
securityRequirement.addSecurityRequirementItem("apiKeys", Collections.emptyList());
operation.addSecurityRequirement(securityRequirement);
-
-
+
+
assertThat(endpoint.determineEndpointParameters(openapi, operation))
.containsOnly(entry("host", "http://petstore.openapi.io"), entry("queryParameters", "q={q}"));
diff --git a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointV3Test.java b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointV3Test.java
index ec9f76a..175dafe 100644
--- a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointV3Test.java
+++ b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointV3Test.java
@@ -88,7 +88,7 @@ public class RestOpenApiEndpointV3Test {
final RestConfiguration restConfiguration = new RestConfiguration();
final CamelContext camelContext = mock(CamelContext.class);
- when(camelContext.getRestConfiguration("rest-openapi", true)).thenReturn(restConfiguration);
+ when(camelContext.getRestConfiguration()).thenReturn(restConfiguration);
final Oas30Document openapi = new Oas30Document();
@@ -107,7 +107,7 @@ public class RestOpenApiEndpointV3Test {
.isEqualTo("/rest");
openapi.addServer("http://petstore.openapi.io", "v3 test");
-
+
component.setBasePath("/component");
assertThat(endpoint.determineBasePath(openapi)).as(
@@ -136,7 +136,7 @@ public class RestOpenApiEndpointV3Test {
operation.createParameter();
assertThat(endpoint.determineEndpointParameters(openapi, operation))
.containsOnly(entry("host", "http://petstore.openapi.io"));
-
+
component.setComponentName("xyz");
assertThat(endpoint.determineEndpointParameters(openapi, operation))
@@ -151,7 +151,7 @@ public class RestOpenApiEndpointV3Test {
operation.responses.addResponse("200", operation.responses.createResponse("200"));
for (String consumer : consumers) {
operation.requestBody.content.put(consumer, operation.requestBody.createMediaType(consumer));
-
+
}
for (String produce : produces) {
for (OasResponse response : operation.responses.getResponses()) {
@@ -159,7 +159,7 @@ public class RestOpenApiEndpointV3Test {
oas30Response.content.put(produce, oas30Response.createMediaType(produce));
}
}
-
+
assertThat(endpoint.determineEndpointParameters(openapi, operation)).containsOnly(
entry("host", "http://petstore.openapi.io"), entry("producerComponentName", "xyz"),
entry("consumes", "application/xml"), entry("produces", "application/json"));
@@ -294,13 +294,8 @@ public class RestOpenApiEndpointV3Test {
public void shouldHonourHostPrecedence() {
final RestConfiguration globalRestConfiguration = new RestConfiguration();
- final RestConfiguration componentRestConfiguration = new RestConfiguration();
- final RestConfiguration specificRestConfiguration = new RestConfiguration();
-
final CamelContext camelContext = mock(CamelContext.class);
when(camelContext.getRestConfiguration()).thenReturn(globalRestConfiguration);
- when(camelContext.getRestConfiguration("rest-openapi", false)).thenReturn(componentRestConfiguration);
- when(camelContext.getRestConfiguration("petstore", false)).thenReturn(specificRestConfiguration);
final RestOpenApiComponent component = new RestOpenApiComponent();
component.setCamelContext(camelContext);
@@ -309,9 +304,9 @@ public class RestOpenApiEndpointV3Test {
"http://specification-uri#getPetById", component, Collections.emptyMap());
final Oas30Document openapi = new Oas30Document();
-
+
assertThat(endpoint.determineHost(openapi)).isEqualTo("http://specification-uri");
-
+
globalRestConfiguration.setHost("global-rest");
globalRestConfiguration.setScheme("http");
assertThat(endpoint.determineHost(openapi)).isEqualTo("http://global-rest");
@@ -320,12 +315,6 @@ public class RestOpenApiEndpointV3Test {
globalRestConfiguration.setScheme("http");
assertThat(endpoint.determineHost(openapi)).isEqualTo("http://component-rest");
- specificRestConfiguration.setHost("specific-rest");
- specificRestConfiguration.setScheme("http");
- assertThat(endpoint.determineHost(openapi)).isEqualTo("http://specific-rest");
-
-
-
component.setHost("http://component");
assertThat(endpoint.determineHost(openapi)).isEqualTo("http://component");
@@ -349,9 +338,9 @@ public class RestOpenApiEndpointV3Test {
apiKeys.name = "key";
apiKeys.in = "header";
openapi.components = openapi.createComponents();
-
+
openapi.components.addSecurityScheme("apiKeys", apiKeys);
-
+
final Oas30Operation operation = new Oas30Operation("get");
Oas30Parameter oas30Parameter = new Oas30Parameter("q");
oas30Parameter.in = "query";
@@ -360,8 +349,8 @@ public class RestOpenApiEndpointV3Test {
SecurityRequirement securityRequirement = operation.createSecurityRequirement();
securityRequirement.addSecurityRequirementItem("apiKeys", Collections.emptyList());
operation.addSecurityRequirement(securityRequirement);
-
-
+
+
assertThat(endpoint.determineEndpointParameters(openapi, operation))
.containsOnly(entry("host", "http://petstore.openapi.io"), entry("queryParameters", "q={q}"));
diff --git a/components/camel-rest-swagger/src/main/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpoint.java b/components/camel-rest-swagger/src/main/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpoint.java
index 32802f0..74d8a70 100644
--- a/components/camel-rest-swagger/src/main/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpoint.java
+++ b/components/camel-rest-swagger/src/main/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpoint.java
@@ -31,6 +31,8 @@ import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import static java.util.Optional.ofNullable;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.models.HttpMethod;
@@ -59,6 +61,7 @@ import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultEndpoint;
import org.apache.camel.support.ResourceHelper;
import org.apache.camel.support.jsse.SSLContextParameters;
@@ -67,7 +70,6 @@ import org.apache.camel.util.StringHelper;
import org.apache.camel.util.UnsafeUriCharactersEncoder;
import org.apache.http.client.methods.HttpGet;
-import static java.util.Optional.ofNullable;
import static org.apache.camel.component.rest.swagger.RestSwaggerHelper.isHostParam;
import static org.apache.camel.component.rest.swagger.RestSwaggerHelper.isMediaRange;
import static org.apache.camel.util.ObjectHelper.isNotEmpty;
@@ -332,13 +334,9 @@ public final class RestSwaggerEndpoint extends DefaultEndpoint {
}
final CamelContext camelContext = getCamelContext();
- final RestConfiguration specificConfiguration = camelContext.getRestConfiguration(assignedComponentName, false);
- if (specificConfiguration != null && isNotEmpty(specificConfiguration.getContextPath())) {
- return specificConfiguration.getContextPath();
- }
-
- final RestConfiguration restConfiguration = camelContext.getRestConfiguration("rest-swagger", true);
+ final RestConfiguration restConfiguration = CamelContextHelper.getRestConfiguration(camelContext, assignedComponentName);
final String restConfigurationBasePath = restConfiguration.getContextPath();
+
if (isNotEmpty(restConfigurationBasePath)) {
return restConfigurationBasePath;
}
@@ -431,22 +429,9 @@ public final class RestSwaggerEndpoint extends DefaultEndpoint {
}
final CamelContext camelContext = getCamelContext();
-
- final RestConfiguration specificRestConfiguration = camelContext.getRestConfiguration(assignedComponentName,
- false);
- final String specificConfigurationHost = hostFrom(specificRestConfiguration);
- if (specificConfigurationHost != null) {
- return specificConfigurationHost;
- }
-
- final RestConfiguration componentRestConfiguration = camelContext.getRestConfiguration("rest-swagger", false);
- final String componentConfigurationHost = hostFrom(componentRestConfiguration);
- if (componentConfigurationHost != null) {
- return componentConfigurationHost;
- }
-
- final RestConfiguration globalRestConfiguration = camelContext.getRestConfiguration();
+ final RestConfiguration globalRestConfiguration = CamelContextHelper.getRestConfiguration(camelContext, assignedComponentName);
final String globalConfigurationHost = hostFrom(globalRestConfiguration);
+
if (globalConfigurationHost != null) {
return globalConfigurationHost;
}
diff --git a/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpointTest.java b/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpointTest.java
index 42c3cd6..fb82e4f 100644
--- a/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpointTest.java
+++ b/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpointTest.java
@@ -84,7 +84,7 @@ public class RestSwaggerEndpointTest {
final RestConfiguration restConfiguration = new RestConfiguration();
final CamelContext camelContext = mock(CamelContext.class);
- when(camelContext.getRestConfiguration("rest-swagger", true)).thenReturn(restConfiguration);
+ when(camelContext.getRestConfiguration()).thenReturn(restConfiguration);
final Swagger swagger = new Swagger();
@@ -267,13 +267,8 @@ public class RestSwaggerEndpointTest {
public void shouldHonourHostPrecedence() {
final RestConfiguration globalRestConfiguration = new RestConfiguration();
- final RestConfiguration componentRestConfiguration = new RestConfiguration();
- final RestConfiguration specificRestConfiguration = new RestConfiguration();
-
final CamelContext camelContext = mock(CamelContext.class);
when(camelContext.getRestConfiguration()).thenReturn(globalRestConfiguration);
- when(camelContext.getRestConfiguration("rest-swagger", false)).thenReturn(componentRestConfiguration);
- when(camelContext.getRestConfiguration("petstore", false)).thenReturn(specificRestConfiguration);
final RestSwaggerComponent component = new RestSwaggerComponent();
component.setCamelContext(camelContext);
@@ -292,10 +287,6 @@ public class RestSwaggerEndpointTest {
globalRestConfiguration.setScheme("http");
assertThat(endpoint.determineHost(swagger)).isEqualTo("http://component-rest");
- specificRestConfiguration.setHost("specific-rest");
- specificRestConfiguration.setScheme("http");
- assertThat(endpoint.determineHost(swagger)).isEqualTo("http://specific-rest");
-
swagger.host("specification").scheme(Scheme.HTTP);
assertThat(endpoint.determineHost(swagger)).isEqualTo("http://specification");
diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/DefaultRestRegistry.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/DefaultRestRegistry.java
index 469f073..1be9520 100644
--- a/components/camel-rest/src/main/java/org/apache/camel/component/rest/DefaultRestRegistry.java
+++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/DefaultRestRegistry.java
@@ -33,6 +33,7 @@ import org.apache.camel.Service;
import org.apache.camel.ServiceStatus;
import org.apache.camel.StatefulService;
import org.apache.camel.StaticService;
+import org.apache.camel.ValueHolder;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestRegistry;
import org.apache.camel.support.LifecycleStrategySupport;
@@ -73,8 +74,8 @@ public class DefaultRestRegistry extends ServiceSupport implements StaticService
if (apiProducer == null) {
Endpoint restApiEndpoint = null;
Endpoint restEndpoint = null;
- for (Map.Entry<String, Endpoint> entry : camelContext.getEndpointMap().entrySet()) {
- String uri = entry.getKey();
+ for (Map.Entry<? extends ValueHolder<String>, Endpoint> entry : camelContext.getEndpointRegistry().entrySet()) {
+ String uri = entry.getKey().get();
if (uri.startsWith("rest-api:")) {
restApiEndpoint = entry.getValue();
break;
@@ -89,11 +90,15 @@ public class DefaultRestRegistry extends ServiceSupport implements StaticService
String componentName = rest.getProducerComponentName();
if (componentName != null) {
- RestConfiguration config = camelContext.getRestConfiguration(componentName, true);
+ RestConfiguration config = camelContext.getRestConfiguration();
+
String apiComponent = config.getApiComponent() != null ? config.getApiComponent() : RestApiEndpoint.DEFAULT_API_COMPONENT_NAME;
String path = config.getApiContextPath() != null ? config.getApiContextPath() : "api-doc";
- restApiEndpoint = camelContext.getEndpoint(String.format("rest-api:%s/%s?componentName=%s&apiComponentName=%s&contextIdPattern=#name#",
- path, camelContext.getName(), componentName, apiComponent));
+ String uri = String.format(
+ "rest-api:%s/%s?componentName=%s&apiComponentName=%s&contextIdPattern=#name#",
+ path, camelContext.getName(), componentName, apiComponent);
+
+ restApiEndpoint = camelContext.getEndpoint(uri);
}
}
@@ -113,8 +118,7 @@ public class DefaultRestRegistry extends ServiceSupport implements StaticService
Exchange dummy = apiProducer.getEndpoint().createExchange();
apiProducer.process(dummy);
- String json = dummy.getMessage().getBody(String.class);
- return json;
+ return dummy.getMessage().getBody(String.class);
} catch (Exception e) {
throw RuntimeCamelException.wrapRuntimeCamelException(e);
}
diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiComponent.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiComponent.java
index 93bc285..c4526ec 100644
--- a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiComponent.java
+++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiComponent.java
@@ -39,7 +39,7 @@ public class RestApiComponent extends DefaultComponent {
answer.setParameters(parameters);
// if no explicit component name was given, then fallback and use default configured component name
- if (answer.getConsumerComponentName() == null && getCamelContext().getRestConfiguration() != null) {
+ if (answer.getConsumerComponentName() == null) {
answer.setConsumerComponentName(getCamelContext().getRestConfiguration().getComponent());
}
diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java
index 39e2b75..73b5009 100644
--- a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java
+++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestApiEndpoint.java
@@ -34,6 +34,7 @@ import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultEndpoint;
import org.apache.camel.util.HostUtils;
import org.apache.camel.util.ObjectHelper;
@@ -132,13 +133,7 @@ public class RestApiEndpoint extends DefaultEndpoint {
public Producer createProducer() throws Exception {
RestApiProcessorFactory factory = null;
- RestConfiguration config = getCamelContext().getRestConfiguration(consumerComponentName, false);
- if (config == null) {
- config = getCamelContext().getRestConfiguration();
- }
- if (config == null) {
- config = getCamelContext().getRestConfiguration(consumerComponentName, true);
- }
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), getConsumerComponentName());
// lookup in registry
Set<RestApiProcessorFactory> factories = getCamelContext().getRegistry().findByType(RestApiProcessorFactory.class);
@@ -155,7 +150,7 @@ public class RestApiEndpoint extends DefaultEndpoint {
FactoryFinder finder = getCamelContext().adapt(ExtendedCamelContext.class).getFactoryFinder(RESOURCE_PATH);
factory = finder.newInstance(name, RestApiProcessorFactory.class).orElse(null);
}
-
+
if (factory == null) {
String name = apiComponentName != null ? apiComponentName : config.getApiComponent();
if (name == null) {
@@ -263,7 +258,7 @@ public class RestApiEndpoint extends DefaultEndpoint {
if (factory != null) {
// calculate the url to the rest API service
- RestConfiguration config = getCamelContext().getRestConfiguration(cname, true);
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), cname);
// calculate the url to the rest API service
String path = getPath();
diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
index d9aa538..72d631e 100644
--- a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
+++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
@@ -16,17 +16,13 @@
*/
package org.apache.camel.component.rest;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
-import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.component.extension.ComponentVerifierExtension;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.RestConfiguration;
-import org.apache.camel.spi.RestConfiguration.RestBindingMode;
-import org.apache.camel.spi.RestConfiguration.RestHostNameResolver;
import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultComponent;
import org.apache.camel.util.FileUtil;
@@ -68,10 +64,7 @@ public class RestComponent extends DefaultComponent {
answer.setProducerComponentName(pname);
answer.setApiDoc(apiDoc);
- RestConfiguration config = new RestConfiguration();
- mergeConfigurations(getCamelContext(), config, findGlobalRestConfiguration());
- mergeConfigurations(getCamelContext(), config, getCamelContext().getRestConfiguration(cname, false));
- mergeConfigurations(getCamelContext(), config, getCamelContext().getRestConfiguration(pname, false));
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), cname, pname);
// if no explicit host was given, then fallback and use default configured host
String h = getAndRemoveOrResolveReferenceParameter(parameters, "host", String.class, host);
@@ -218,78 +211,6 @@ public class RestComponent extends DefaultComponent {
// Helpers
// ****************************************
- private RestConfiguration findGlobalRestConfiguration() {
- CamelContext context = getCamelContext();
-
- RestConfiguration conf = CamelContextHelper.lookup(context, DEFAULT_REST_CONFIGURATION_ID, RestConfiguration.class);
- if (conf == null) {
- conf = CamelContextHelper.findByType(getCamelContext(), RestConfiguration.class);
- }
-
- return conf;
- }
-
- private RestConfiguration mergeConfigurations(CamelContext camelContext, RestConfiguration conf, RestConfiguration from) throws Exception {
- if (conf == from) {
- return conf;
- }
- if (from != null) {
- // Merge properties
- conf.setComponent(or(conf.getComponent(), from.getComponent()));
- conf.setApiComponent(or(conf.getApiComponent(), from.getApiComponent()));
- conf.setProducerComponent(or(conf.getProducerComponent(), from.getProducerComponent()));
- conf.setProducerApiDoc(or(conf.getProducerApiDoc(), from.getProducerApiDoc()));
- conf.setScheme(or(conf.getScheme(), from.getScheme()));
- conf.setHost(or(conf.getHost(), from.getHost()));
- conf.setUseXForwardHeaders(or(conf.isUseXForwardHeaders(), from.isUseXForwardHeaders()));
- conf.setApiHost(or(conf.getApiHost(), from.getApiHost()));
- conf.setPort(or(conf.getPort(), from.getPort()));
- conf.setContextPath(or(conf.getContextPath(), from.getContextPath()));
- conf.setApiContextPath(or(conf.getApiContextPath(), from.getApiContextPath()));
- conf.setApiContextRouteId(or(conf.getApiContextRouteId(), from.getApiContextRouteId()));
- conf.setApiContextIdPattern(or(conf.getApiContextIdPattern(), from.getApiContextIdPattern()));
- conf.setApiContextListing(or(conf.isApiContextListing(), from.isApiContextListing()));
- conf.setApiVendorExtension(or(conf.isApiVendorExtension(), from.isApiVendorExtension()));
- conf.setHostNameResolver(or(conf.getHostNameResolver(), from.getHostNameResolver(), RestHostNameResolver.allLocalIp));
- conf.setBindingMode(or(conf.getBindingMode(), from.getBindingMode(), RestBindingMode.off));
- conf.setSkipBindingOnErrorCode(or(conf.isSkipBindingOnErrorCode(), from.isSkipBindingOnErrorCode()));
- conf.setClientRequestValidation(or(conf.isClientRequestValidation(), from.isClientRequestValidation()));
- conf.setEnableCORS(or(conf.isEnableCORS(), from.isEnableCORS()));
- conf.setJsonDataFormat(or(conf.getJsonDataFormat(), from.getJsonDataFormat()));
- conf.setXmlDataFormat(or(conf.getXmlDataFormat(), from.getXmlDataFormat()));
- conf.setComponentProperties(mergeProperties(conf.getComponentProperties(), from.getComponentProperties()));
- conf.setEndpointProperties(mergeProperties(conf.getEndpointProperties(), from.getEndpointProperties()));
- conf.setConsumerProperties(mergeProperties(conf.getConsumerProperties(), from.getConsumerProperties()));
- conf.setDataFormatProperties(mergeProperties(conf.getDataFormatProperties(), from.getDataFormatProperties()));
- conf.setApiProperties(mergeProperties(conf.getApiProperties(), from.getApiProperties()));
- conf.setCorsHeaders(mergeProperties(conf.getCorsHeaders(), from.getCorsHeaders()));
- }
-
- return conf;
- }
-
- private <T> T or(T t1, T t2) {
- return t2 != null ? t2 : t1;
- }
-
- private <T> T or(T t1, T t2, T def) {
- return t2 != null && t2 != def ? t2 : t1;
- }
-
- private <T> Map<String, T> mergeProperties(Map<String, T> base, Map<String, T> addons) {
- if (base != null || addons != null) {
- Map<String, T> result = new HashMap<>();
- if (base != null) {
- result.putAll(base);
- }
- if (addons != null) {
- result.putAll(addons);
- }
- return result;
- }
- return base;
- }
-
public ComponentVerifierExtension getVerifier() {
return (scope, parameters) -> getExtension(ComponentVerifierExtension.class).orElseThrow(UnsupportedOperationException::new).verify(scope, parameters);
}
diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java
index d814060..3506c14 100644
--- a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java
+++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestEndpoint.java
@@ -35,6 +35,7 @@ import org.apache.camel.spi.RestProducerFactory;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultEndpoint;
import org.apache.camel.support.component.PropertyConfigurerSupport;
import org.apache.camel.util.HostUtils;
@@ -300,6 +301,7 @@ public class RestEndpoint extends DefaultEndpoint {
this.bindingMode = RestConfiguration.RestBindingMode.valueOf(bindingMode.toLowerCase());
}
+ @SuppressWarnings("unchecked")
@Override
public Producer createProducer() throws Exception {
if (ObjectHelper.isEmpty(host)) {
@@ -423,13 +425,9 @@ public class RestEndpoint extends DefaultEndpoint {
if (factory != null) {
LOG.debug("Using RestProducerFactory: {}", factory);
- RestConfiguration config = getCamelContext().getRestConfiguration(pname, false);
- if (config == null) {
- config = getCamelContext().getRestConfiguration();
- }
- if (config == null) {
- config = getCamelContext().getRestConfiguration(pname, true);
- }
+ // here we look for the producer part so we should not care about the component
+ // configured for the consumer part
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), null, pname);
Producer producer;
if (apiDocFactory != null) {
@@ -524,7 +522,7 @@ public class RestEndpoint extends DefaultEndpoint {
String host = "";
int port = 80;
- RestConfiguration config = getCamelContext().getRestConfiguration(cname, true);
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), cname);
if (config.getScheme() != null) {
scheme = config.getScheme();
}
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 e37320a..d19a0e2 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
@@ -33,6 +33,7 @@ import org.apache.camel.spi.RestApiConsumerFactory;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestConsumerFactory;
import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.RestComponentHelper;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.StringHelper;
@@ -279,7 +280,7 @@ public class ServletComponent extends HttpCommonComponent implements RestConsume
// if no explicit port/host configured, then use port from rest configuration
RestConfiguration config = configuration;
if (config == null) {
- config = camelContext.getRestConfiguration("servlet", true);
+ config = CamelContextHelper.getRestConfiguration(getCamelContext(), "servlet");
}
Map<String, Object> map = RestComponentHelper.initRestEndpointProperties("servlet", config);
@@ -289,14 +290,14 @@ public class ServletComponent extends HttpCommonComponent implements RestConsume
// allow HTTP Options as we want to handle CORS in rest-dsl
map.put("optionsEnabled", "true");
}
-
+
if (api) {
map.put("matchOnUriPrefix", "true");
}
-
+
RestComponentHelper.addHttpRestrictParam(map, verb, cors);
- String url = RestComponentHelper.createRestConsumerUrl("servlet", path, map);
+ String url = RestComponentHelper.createRestConsumerUrl("servlet", path, map);
ServletEndpoint endpoint = camelContext.getEndpoint(url, ServletEndpoint.class);
setProperties(endpoint, parameters);
@@ -324,7 +325,8 @@ public class ServletComponent extends HttpCommonComponent implements RestConsume
protected void doStart() throws Exception {
super.doStart();
- RestConfiguration config = getCamelContext().getRestConfiguration("servlet", true);
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), "servlet");
+
// configure additional options on jetty configuration
if (config.getComponentProperties() != null && !config.getComponentProperties().isEmpty()) {
setProperties(this, config.getComponentProperties());
diff --git a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkRestComponent.java b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkRestComponent.java
index 0e3df18..12fac30 100644
--- a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkRestComponent.java
+++ b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkRestComponent.java
@@ -30,6 +30,7 @@ import org.apache.camel.spi.RestApiConsumerFactory;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestConsumerFactory;
import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultComponent;
import org.apache.camel.support.RestComponentHelper;
import org.apache.camel.util.FileUtil;
@@ -42,7 +43,7 @@ import spark.Service;
public class SparkRestComponent extends DefaultComponent implements RestConsumerFactory, RestApiConsumerFactory {
private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}");
-
+
/**
* SPARK instance for the component
*/
@@ -232,7 +233,7 @@ public class SparkRestComponent extends DefaultComponent implements RestConsumer
sparkInstance.port(getPort());
} else {
// if no explicit port configured, then use port from rest configuration
- RestConfiguration config = getCamelContext().getRestConfiguration("spark-rest", true);
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), "spark-rest");
int port = config.getPort();
if (port > 0) {
sparkInstance.port(port);
@@ -244,7 +245,7 @@ public class SparkRestComponent extends DefaultComponent implements RestConsumer
sparkInstance.ipAddress(host);
} else {
// if no explicit port configured, then use port from rest configuration
- RestConfiguration config = getCamelContext().getRestConfiguration("spark-rest", true);
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), "spark-rest");
host = config.getHost();
if (ObjectHelper.isEmpty(host)) {
if (config.getHostNameResolver() == RestConfiguration.RestHostNameResolver.allLocalIp) {
@@ -261,11 +262,11 @@ public class SparkRestComponent extends DefaultComponent implements RestConsumer
if (keystoreFile != null || truststoreFile != null) {
sparkInstance.secure(keystoreFile, keystorePassword, truststoreFile, truststorePassword);
}
-
+
CamelSpark.threadPool(sparkInstance, minThreads, maxThreads, timeOutMillis);
// configure component options
- RestConfiguration config = getCamelContext().getRestConfiguration("spark-rest", true);
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), "spark-rest");
// configure additional options on spark configuration
if (config.getComponentProperties() != null && !config.getComponentProperties().isEmpty()) {
setProperties(sparkConfiguration, config.getComponentProperties());
@@ -307,7 +308,7 @@ public class SparkRestComponent extends DefaultComponent implements RestConsumer
RestConfiguration config = configuration;
if (config == null) {
- config = camelContext.getRestConfiguration("spark-rest", true);
+ config = CamelContextHelper.getRestConfiguration(camelContext, "spark-rest");
}
Map<String, Object> map = new HashMap<>();
@@ -335,10 +336,10 @@ public class SparkRestComponent extends DefaultComponent implements RestConsumer
path = contextPath + "/" + path;
}
}
-
+
if (api) {
map.put("matchOnUriPrefix", "true");
- }
+ }
String url = RestComponentHelper.createRestConsumerUrl("spark-rest", verb, path, map);
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestProducerFactory.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestProducerFactory.java
index 6a915f2..69838c8 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestProducerFactory.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestProducerFactory.java
@@ -29,6 +29,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.Producer;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestProducerFactory;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.util.CollectionStringBuffer;
import org.apache.camel.util.IOHelper;
import org.slf4j.Logger;
@@ -180,8 +181,11 @@ public class SwaggerRestProducerFactory implements RestProducerFactory {
basePath = path;
uriTemplate = null;
}
- RestConfiguration config = camelContext.getRestConfiguration(componentName, true);
- return factory.createProducer(camelContext, host, verb, basePath, uriTemplate, queryParameters, consumes, produces, config, parameters);
+
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(camelContext, componentName);
+
+ return factory.createProducer(
+ camelContext, host, verb, basePath, uriTemplate, queryParameters, consumes, produces, config, parameters);
} else {
throw new IllegalStateException("Cannot find RestProducerFactory in Registry or as a Component to use");
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 3f963e8..de3e329 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
@@ -41,6 +41,7 @@ import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RestConsumerFactory;
import org.apache.camel.spi.RestProducerFactory;
import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultComponent;
import org.apache.camel.support.RestComponentHelper;
import org.apache.camel.support.RestProducerFactoryHelper;
@@ -166,7 +167,8 @@ public class UndertowComponent extends DefaultComponent implements RestConsumerF
RestConfiguration config = configuration;
if (config == null) {
- config = camelContext.getRestConfiguration(getComponentName(), true);
+ config = CamelContextHelper.getRestConfiguration(camelContext, getComponentName());
+
}
if (config.getScheme() != null) {
scheme = config.getScheme();
@@ -197,10 +199,10 @@ public class UndertowComponent extends DefaultComponent implements RestConsumerF
Map<String, Object> map = RestComponentHelper.initRestEndpointProperties(getComponentName(), config);
// build query string, and append any endpoint configuration properties
-
+
// must use upper case for restrict
String restrict = verb.toUpperCase(Locale.US);
-
+
boolean explicitOptions = restrict.contains("OPTIONS");
boolean cors = config.isEnableCORS();
@@ -211,11 +213,11 @@ public class UndertowComponent extends DefaultComponent implements RestConsumerF
// the rest-dsl is using OPTIONS
map.put("optionsEnabled", "true");
}
-
+
if (api) {
map.put("matchOnUriPrefix", "true");
}
-
+
RestComponentHelper.addHttpRestrictParam(map, verb, !explicitOptions);
String url = RestComponentHelper.createRestConsumerUrl(getComponentName(), scheme, host, port, path, map);
@@ -259,13 +261,7 @@ public class UndertowComponent extends DefaultComponent implements RestConsumerF
url += "/" + uriTemplate;
}
- RestConfiguration config = getCamelContext().getRestConfiguration(getComponentName(), false);
- if (config == null) {
- config = getCamelContext().getRestConfiguration();
- }
- if (config == null) {
- config = getCamelContext().getRestConfiguration(getComponentName(), true);
- }
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(camelContext, getComponentName());
Map<String, Object> map = new HashMap<>();
// build query string, and append any endpoint configuration properties
@@ -304,7 +300,8 @@ public class UndertowComponent extends DefaultComponent implements RestConsumerF
protected void doStart() throws Exception {
super.doStart();
- RestConfiguration config = getCamelContext().getRestConfiguration(getComponentName(), true);
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(getCamelContext(), getComponentName());
+
// configure additional options on undertow configuration
if (config.getComponentProperties() != null && !config.getComponentProperties().isEmpty()) {
setProperties(this, config.getComponentProperties());
@@ -314,7 +311,7 @@ public class UndertowComponent extends DefaultComponent implements RestConsumerF
public HttpHandler registerEndpoint(UndertowConsumer consumer, HttpHandlerRegistrationInfo registrationInfo, SSLContext sslContext, HttpHandler handler) {
final URI uri = registrationInfo.getUri();
final UndertowHostKey key = new UndertowHostKey(uri.getHost(), uri.getPort(), sslContext);
- final UndertowHost host = undertowRegistry.computeIfAbsent(key, k -> createUndertowHost(k));
+ final UndertowHost host = undertowRegistry.computeIfAbsent(key, this::createUndertowHost);
host.validateEndpointURI(uri);
handlers.add(registrationInfo);
diff --git a/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookComponent.java b/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookComponent.java
index 2bf7cb3..3e98aa2 100644
--- a/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookComponent.java
+++ b/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/WebhookComponent.java
@@ -24,6 +24,7 @@ import org.apache.camel.Endpoint;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultComponent;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.URISupport;
@@ -48,7 +49,8 @@ public class WebhookComponent extends DefaultComponent {
}
WebhookConfiguration config = configuration != null ? configuration.copy() : new WebhookConfiguration();
- RestConfiguration restConfig = getCamelContext().getRestConfiguration(config.getWebhookComponentName(), true);
+
+ RestConfiguration restConfig = CamelContextHelper.getRestConfiguration(getCamelContext(), config.getWebhookComponentName());
config.storeConfiguration(restConfig);
WebhookEndpoint endpoint = new WebhookEndpoint(uri, this, config);
diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
index a51c1d7..dc15f44 100644
--- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
@@ -622,30 +622,6 @@ public interface CamelContext extends CamelContextLifecycle, RuntimeConfiguratio
RestConfiguration getRestConfiguration();
/**
- * Sets a custom {@link org.apache.camel.spi.RestConfiguration}
- *
- * @param restConfiguration the REST configuration
- */
- @Deprecated
- void addRestConfiguration(RestConfiguration restConfiguration);
-
- /**
- * 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
- * @return the configuration, or <tt>null</tt> if none has been configured.
- */
- RestConfiguration getRestConfiguration(String component, boolean defaultIfNotFound);
-
- /**
- * Gets all the RestConfiguration's
- */
- @Deprecated
- Collection<RestConfiguration> getRestConfigurations();
-
- /**
* Gets the {@link org.apache.camel.spi.RestRegistry} to use
*/
RestRegistry getRestRegistry();
@@ -740,7 +716,7 @@ public interface CamelContext extends CamelContextLifecycle, RuntimeConfiguratio
* @throws IllegalArgumentException is thrown if property placeholders was used and there was an error resolving them
*/
String resolvePropertyPlaceholders(String text);
-
+
/**
* Returns the configured properties component or create one if none has been configured.
*
@@ -1092,9 +1068,9 @@ public interface CamelContext extends CamelContextLifecycle, RuntimeConfiguratio
* @return the uuidGenerator
*/
UuidGenerator getUuidGenerator();
-
+
/**
- * Sets a custom {@link UuidGenerator} (should only be set once)
+ * Sets a custom {@link UuidGenerator} (should only be set once)
*
* @param uuidGenerator the UUID Generator
*/
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RestConfiguration.java b/core/camel-api/src/main/java/org/apache/camel/spi/RestConfiguration.java
index 7be7c34..01a7836 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RestConfiguration.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RestConfiguration.java
@@ -29,6 +29,8 @@ public class RestConfiguration {
public static final String CORS_ACCESS_CONTROL_MAX_AGE = "3600";
public static final String CORS_ACCESS_CONTROL_ALLOW_HEADERS = "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers";
+ public static final String DEFAULT_REST_CONFIGURATION_ID = "rest-configuration";
+
public enum RestBindingMode {
auto, off, json, xml, json_xml
}
@@ -172,7 +174,7 @@ public class RestConfiguration {
* WWhether to use X-Forward headers to set host etc. for Swagger.
* <p/>
* This option is default <tt>true</tt>.
- *
+ *
* @param useXForwardHeaders whether to use X-Forward headers
*/
public void setUseXForwardHeaders(boolean useXForwardHeaders) {
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index f546993..8f3dacb 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -197,7 +197,7 @@ public abstract class AbstractCamelContext extends BaseService
private boolean autoCreateComponents = true;
private final Map<String, Language> languages = new ConcurrentHashMap<>();
private final List<LifecycleStrategy> lifecycleStrategies = new CopyOnWriteArrayList<>();
- private Map<String, RestConfiguration> restConfigurations = new ConcurrentHashMap<>();
+ private volatile RestConfiguration restConfiguration;
private List<InterceptStrategy> interceptStrategies = new ArrayList<>();
private List<RoutePolicyFactory> routePolicyFactories = new ArrayList<>();
private Set<LogListener> logListeners = new LinkedHashSet<>();
@@ -2006,39 +2006,19 @@ public abstract class AbstractCamelContext extends BaseService
@Override
public RestConfiguration getRestConfiguration() {
- return restConfigurations.get("");
+ if (restConfiguration == null) {
+ synchronized (lock) {
+ if (restConfiguration == null) {
+ setRestConfiguration(createRestConfiguration());
+ }
+ }
+ }
+ return restConfiguration;
}
@Override
public void setRestConfiguration(RestConfiguration restConfiguration) {
- restConfigurations.put("", restConfiguration);
- }
-
- @Override
- public Collection<RestConfiguration> getRestConfigurations() {
- return restConfigurations.values();
- }
-
- @Override
- public void addRestConfiguration(RestConfiguration restConfiguration) {
- restConfigurations.put(restConfiguration.getComponent(), restConfiguration);
- }
-
- @Override
- public RestConfiguration getRestConfiguration(String component, boolean defaultIfNotExist) {
- if (component == null) {
- component = "";
- }
- RestConfiguration config = restConfigurations.get(component);
- if (config == null && defaultIfNotExist) {
- // grab the default configuration
- config = getRestConfiguration();
- if (config == null || (config.getComponent() != null && !config.getComponent().equals(component))) {
- config = new RestConfiguration();
- restConfigurations.put(component, config);
- }
- }
- return config;
+ this.restConfiguration = restConfiguration;
}
@Override
@@ -4526,6 +4506,19 @@ public abstract class AbstractCamelContext extends BaseService
protected abstract ValidatorRegistry<ValidatorKey> createValidatorRegistry();
+ protected RestConfiguration createRestConfiguration() {
+ // lookup a global which may have been on a container such spring-boot / CDI / etc.
+ RestConfiguration conf = CamelContextHelper.lookup(this, RestConfiguration.DEFAULT_REST_CONFIGURATION_ID, RestConfiguration.class);
+ if (conf == null) {
+ conf = CamelContextHelper.findByType(this, RestConfiguration.class);
+ }
+ if (conf == null) {
+ conf = new RestConfiguration();
+ }
+
+ return conf;
+ }
+
@Override
public RouteController getInternalRouteController() {
return new RouteController() {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/RouteBuilder.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/RouteBuilder.java
index e2e7268..d12a951 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/RouteBuilder.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/RouteBuilder.java
@@ -17,9 +17,7 @@
package org.apache.camel.builder;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -67,7 +65,7 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
protected Logger log = LoggerFactory.getLogger(getClass());
private AtomicBoolean initialized = new AtomicBoolean(false);
private RestsDefinition restCollection = new RestsDefinition();
- private Map<String, RestConfigurationDefinition> restConfigurations;
+ private RestConfigurationDefinition restConfiguration;
private List<TransformerBuilder> transformerBuilders = new ArrayList<>();
private List<ValidatorBuilder> validatorBuilders = new ArrayList<>();
private RoutesDefinition routeCollection = new RoutesDefinition();
@@ -160,26 +158,10 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
* @return the builder
*/
public RestConfigurationDefinition restConfiguration() {
- return restConfiguration("");
- }
-
- /**
- * Configures the REST service for the given component
- *
- * @return the builder
- */
- public RestConfigurationDefinition restConfiguration(String component) {
- if (restConfigurations == null) {
- restConfigurations = new HashMap<>();
- }
- RestConfigurationDefinition restConfiguration = restConfigurations.get(component);
if (restConfiguration == null) {
restConfiguration = new RestConfigurationDefinition();
- if (!component.isEmpty()) {
- restConfiguration.component(component);
- }
- restConfigurations.put(component, restConfiguration);
}
+
return restConfiguration;
}
@@ -528,39 +510,37 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
getRestCollection().setCamelContext(camelContext);
// setup rest configuration before adding the rests
- if (getRestConfigurations() != null) {
- for (Map.Entry<String, RestConfigurationDefinition> entry : getRestConfigurations().entrySet()) {
- entry.getValue().asRestConfiguration(
- getContext(),
- camelContext.getRestConfiguration(entry.getKey(), true));
- }
+ if (restConfiguration != null) {
+ restConfiguration.asRestConfiguration(getContext(), camelContext.getRestConfiguration());
}
+
// cannot add rests as routes yet as we need to initialize this
// specially
camelContext.getExtension(Model.class).addRestDefinitions(getRestCollection().getRests(), false);
// convert rests api-doc into routes so they are routes for runtime
- for (RestConfiguration config : camelContext.getRestConfigurations()) {
- if (config.getApiContextPath() != null) {
- // avoid adding rest-api multiple times, in case multiple
- // RouteBuilder classes is added
- // to the CamelContext, as we only want to setup rest-api once
- // so we check all existing routes if they have rest-api route
- // already added
- boolean hasRestApi = false;
- for (RouteDefinition route : camelContext.getExtension(Model.class).getRouteDefinitions()) {
- FromDefinition from = route.getInput();
- if (from.getEndpointUri() != null && from.getEndpointUri().startsWith("rest-api:")) {
- hasRestApi = true;
- }
- }
- if (!hasRestApi) {
- RouteDefinition route = RestDefinition.asRouteApiDefinition(camelContext, config);
- log.debug("Adding routeId: {} as rest-api route", route.getId());
- getRouteCollection().route(route);
+ RestConfiguration config = camelContext.getRestConfiguration();
+
+ if (config.getApiContextPath() != null) {
+ // avoid adding rest-api multiple times, in case multiple
+ // RouteBuilder classes is added
+ // to the CamelContext, as we only want to setup rest-api once
+ // so we check all existing routes if they have rest-api route
+ // already added
+ boolean hasRestApi = false;
+ for (RouteDefinition route : camelContext.getExtension(Model.class).getRouteDefinitions()) {
+ FromDefinition from = route.getInput();
+ if (from.getEndpointUri() != null && from.getEndpointUri().startsWith("rest-api:")) {
+ hasRestApi = true;
}
}
+ if (!hasRestApi) {
+ RouteDefinition route = RestDefinition.asRouteApiDefinition(camelContext, config);
+ log.debug("Adding routeId: {} as rest-api route", route.getId());
+ getRouteCollection().route(route);
+ }
}
+
// add rest as routes and have them prepared as well via
// routeCollection.route method
getRestCollection().getRests().forEach(rest -> rest.asRouteDefinition(getContext()).forEach(route -> getRouteCollection().route(route)));
@@ -610,8 +590,8 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
return restCollection;
}
- public Map<String, RestConfigurationDefinition> getRestConfigurations() {
- return restConfigurations;
+ public RestConfigurationDefinition getRestConfiguration() {
+ return restConfiguration;
}
public void setRestCollection(RestsDefinition restCollection) {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/ImmutableCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/ImmutableCamelContext.java
index 5d8368e..f4da70e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/ImmutableCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/ImmutableCamelContext.java
@@ -541,23 +541,6 @@ public class ImmutableCamelContext implements ExtendedCamelContext, CatalogCamel
}
@Override
- @Deprecated
- public void addRestConfiguration(RestConfiguration restConfiguration) {
- delegate.addRestConfiguration(restConfiguration);
- }
-
- @Override
- public RestConfiguration getRestConfiguration(String component, boolean defaultIfNotFound) {
- return delegate.getRestConfiguration(component, defaultIfNotFound);
- }
-
- @Override
- @Deprecated
- public Collection<RestConfiguration> getRestConfigurations() {
- return delegate.getRestConfigurations();
- }
-
- @Override
public RestRegistry getRestRegistry() {
return delegate.getRestRegistry();
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/RuntimeImmutableCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/RuntimeImmutableCamelContext.java
index 0470117..47992fd 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/RuntimeImmutableCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/RuntimeImmutableCamelContext.java
@@ -714,16 +714,6 @@ public class RuntimeImmutableCamelContext implements ExtendedCamelContext, Catal
}
@Override
- public RestConfiguration getRestConfiguration(String component, boolean defaultIfNotFound) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Collection<RestConfiguration> getRestConfigurations() {
- throw new UnsupportedOperationException();
- }
-
- @Override
public RestRegistry getRestRegistry() {
throw new UnsupportedOperationException();
}
@@ -1627,11 +1617,6 @@ public class RuntimeImmutableCamelContext implements ExtendedCamelContext, Catal
}
@Override
- public void addRestConfiguration(RestConfiguration restConfiguration) {
- throw new UnsupportedOperationException();
- }
-
- @Override
public void setRestRegistry(RestRegistry restRegistry) {
throw new UnsupportedOperationException();
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestConstants.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestConstants.java
deleted file mode 100644
index 7ec4d99..0000000
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestConstants.java
+++ /dev/null
@@ -1,24 +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.
- */
-package org.apache.camel.model.rest;
-
-public final class RestConstants {
- public static final String DEFAULT_REST_CONFIGURATION_ID = "rest-configuration";
-
- private RestConstants() {
- }
-}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestDefinition.java
index f270e22..1ff251f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestDefinition.java
@@ -43,7 +43,6 @@ import org.apache.camel.model.ToDefinition;
import org.apache.camel.model.ToDynamicDefinition;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.RestConfiguration;
-import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
@@ -677,23 +676,11 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
validateUniquePaths();
List<RouteDefinition> answer = new ArrayList<>();
- if (camelContext.getRestConfigurations().isEmpty()) {
- // make sure to initialize a rest configuration when its empty
- // lookup a global which may have been setup via camel-spring-boot
- // etc
- RestConfiguration conf = CamelContextHelper.lookup(camelContext, RestConstants.DEFAULT_REST_CONFIGURATION_ID, RestConfiguration.class);
- if (conf == null) {
- conf = CamelContextHelper.findByType(camelContext, RestConfiguration.class);
- }
- if (conf != null) {
- camelContext.setRestConfiguration(conf);
- } else {
- camelContext.setRestConfiguration(new RestConfiguration());
- }
- }
- for (RestConfiguration config : camelContext.getRestConfigurations()) {
- addRouteDefinition(camelContext, answer, config.getComponent(), config.getProducerComponent());
- }
+
+ RestConfiguration config = camelContext.getRestConfiguration();
+
+ addRouteDefinition(camelContext, answer, config.getComponent(), config.getProducerComponent());
+
return answer;
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
index af2b124..aad39ee 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
@@ -29,6 +29,7 @@ import org.apache.camel.processor.RestBindingAdvice;
import org.apache.camel.reifier.AbstractReifier;
import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.RestConfiguration;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.PropertyBindingSupport;
public class RestBindingReifier extends AbstractReifier {
@@ -41,7 +42,7 @@ public class RestBindingReifier extends AbstractReifier {
}
public RestBindingAdvice createRestBindingAdvice() throws Exception {
- RestConfiguration config = camelContext.getRestConfiguration(definition.getComponent(), true);
+ RestConfiguration config = CamelContextHelper.getRestConfiguration(camelContext, definition.getComponent());
// these options can be overridden per rest verb
String mode = config.getBindingMode().name();
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index b8e8ffa..135d674 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -438,24 +438,24 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
getContext().addRestDefinitions(getRests(), false);
// convert rests api-doc into routes so they are routes for runtime
- for (RestConfiguration config : getContext().getRestConfigurations()) {
- if (config.getApiContextPath() != null) {
- // avoid adding rest-api multiple times, in case multiple RouteBuilder classes is added
- // to the CamelContext, as we only want to setup rest-api once
- // so we check all existing routes if they have rest-api route already added
- boolean hasRestApi = false;
- for (RouteDefinition route : getContext().getRouteDefinitions()) {
- FromDefinition from = route.getInput();
- if (from.getUri() != null && from.getUri().startsWith("rest-api:")) {
- hasRestApi = true;
- }
- }
- if (!hasRestApi) {
- RouteDefinition route = RestDefinition.asRouteApiDefinition(getContext(), config);
- LOG.debug("Adding routeId: {} as rest-api route", route.getId());
- getRoutes().add(route);
+ RestConfiguration config = getContext().getRestConfiguration();
+
+ if (config.getApiContextPath() != null) {
+ // avoid adding rest-api multiple times, in case multiple RouteBuilder classes is added
+ // to the CamelContext, as we only want to setup rest-api once
+ // so we check all existing routes if they have rest-api route already added
+ boolean hasRestApi = false;
+ for (RouteDefinition route : getContext().getRouteDefinitions()) {
+ FromDefinition from = route.getInput();
+ if (from.getUri() != null && from.getUri().startsWith("rest-api:")) {
+ hasRestApi = true;
}
}
+ if (!hasRestApi) {
+ RouteDefinition route = RestDefinition.asRouteApiDefinition(getContext(), config);
+ LOG.debug("Adding routeId: {} as rest-api route", route.getId());
+ getRoutes().add(route);
+ }
}
// add each rest as route
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java
index 39c9d6b..49d3f5f 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java
@@ -17,6 +17,7 @@
package org.apache.camel.support;
import java.util.Map;
+import java.util.Objects;
import java.util.Properties;
import java.util.Set;
@@ -29,6 +30,7 @@ import org.apache.camel.NoSuchBeanException;
import org.apache.camel.NoSuchEndpointException;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.NormalizedEndpointUri;
+import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.spi.RouteStartupOrder;
import org.apache.camel.util.ObjectHelper;
@@ -587,4 +589,51 @@ public final class CamelContextHelper {
return parent != null ? parent.getId() : null;
}
+ /**
+ * Gets the {@link RestConfiguration} from the {@link CamelContext} and check if the component which consumes the
+ * configuration is compatible with the one for which the rest configuration is set-up.
+ *
+ * @param camelContext the camel context
+ * @param component the component that will consume the {@link RestConfiguration}
+ * @return the {@link RestConfiguration}
+ * @throws IllegalArgumentException is the component is not compatible with the {@link RestConfiguration} set-up
+ */
+ public static RestConfiguration getRestConfiguration(CamelContext camelContext, String component) {
+ RestConfiguration configuration = camelContext.getRestConfiguration();
+
+ validateRestConfigurationComponent(component, configuration.getComponent());
+
+ return configuration;
+ }
+
+ /**
+ * Gets the {@link RestConfiguration} from the {@link CamelContext} and check if the component which consumes the
+ * configuration is compatible with the one for which the rest configuration is set-up.
+ *
+ * @param camelContext the camel context
+ * @param component the component that will consume the {@link RestConfiguration}
+ * @param producerComponent the producer component that will consume the {@link RestConfiguration}
+ * @return the {@link RestConfiguration}
+ * @throws IllegalArgumentException is the component is not compatible with the {@link RestConfiguration} set-up
+ */
+ public static RestConfiguration getRestConfiguration(CamelContext camelContext, String component, String producerComponent) {
+ RestConfiguration configuration = camelContext.getRestConfiguration();
+
+ validateRestConfigurationComponent(component, configuration.getComponent());
+ validateRestConfigurationComponent(producerComponent, configuration.getProducerComponent());
+
+ return configuration;
+ }
+
+ private static void validateRestConfigurationComponent(String component, String configurationComponent) {
+ if (ObjectHelper.isEmpty(component) || ObjectHelper.isEmpty(configurationComponent)) {
+ return;
+ }
+
+ if (!Objects.equals(component, configurationComponent)) {
+ throw new IllegalArgumentException(
+ "No RestConfiguration for component: " + component + " found, RestConfiguration targets: " + configurationComponent
+ );
+ }
+ }
}