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:43 UTC

[camel] branch master updated (3bb388a -> 702a6b2)

This is an automated email from the ASF dual-hosted git repository.

lburgazzoli pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from 3bb388a  CAMEL-14663 - Camel-AWS2 S3: Add support for multipart upload, added an integration test
     new c4aadb3  CAMEL-13844 RestConfiguration - Make it simpler and only have one
     new 9edf3b8  Add slf4j implementation to avoid warning when running tests
     new 702a6b2  Fix usage of deprecated mockito method

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 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 +++---
 .../camel/openapi/RestOpenApiSupportTest.java      | 26 +++---
 .../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/camel-core-xml/pom.xml                        | 17 ++++
 .../core/xml/AbstractCamelContextFactoryBean.java  | 42 ++++------
 .../src/test/resources/log4j2.properties           |  4 +-
 .../apache/camel/support/CamelContextHelper.java   | 49 +++++++++++
 40 files changed, 328 insertions(+), 530 deletions(-)
 delete mode 100644 core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestConstants.java
 copy core/{camel-cloud => camel-core-xml}/src/test/resources/log4j2.properties (96%)


[camel] 01/03: CAMEL-13844 RestConfiguration - Make it simpler and only have one

Posted by lb...@apache.org.
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
+            );
+        }
+    }
 }


[camel] 02/03: Add slf4j implementation to avoid warning when running tests

Posted by lb...@apache.org.
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 9edf3b84836a1b604dc8bc2e6a0ce0ffde1cafeb
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Wed Mar 18 10:08:56 2020 +0100

    Add slf4j implementation to avoid warning when running tests
---
 core/camel-core-xml/pom.xml                        | 17 +++++++++++
 .../core/xml/AbstractCamelContextFactoryBean.java  | 10 +------
 .../src/test/resources/log4j2.properties           | 33 ++++++++++++++++++++++
 3 files changed, 51 insertions(+), 9 deletions(-)

diff --git a/core/camel-core-xml/pom.xml b/core/camel-core-xml/pom.xml
index fb73bd6..98f8b2f 100644
--- a/core/camel-core-xml/pom.xml
+++ b/core/camel-core-xml/pom.xml
@@ -55,6 +55,23 @@
             <version>${assertj-version}</version>
             <scope>test</scope>
         </dependency>
+
+        <!-- logging for testing -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-slf4j-impl</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>
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 135d674..6cfb14f 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
@@ -972,15 +972,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
             context.getTypeConverterRegistry().setTypeConverterExistsLoggingLevel(getTypeConverterExistsLoggingLevel());
         }
         if (getRestConfiguration() != null) {
-            RestConfiguration config = context.getRestConfiguration();
-            if (config == null) {
-                config = new RestConfiguration();
-                context.setRestConfiguration(config);
-            }
-            if (context.getRestConfiguration() != null) {
-                // merge on top of existing
-                getRestConfiguration().asRestConfiguration(context, config);
-            }
+            getRestConfiguration().asRestConfiguration(context, context.getRestConfiguration());
         }
         if (getDefaultServiceCallConfiguration() != null) {
             context.setServiceCallConfiguration(getDefaultServiceCallConfiguration());
diff --git a/core/camel-core-xml/src/test/resources/log4j2.properties b/core/camel-core-xml/src/test/resources/log4j2.properties
new file mode 100644
index 0000000..2d09af6
--- /dev/null
+++ b/core/camel-core-xml/src/test/resources/log4j2.properties
@@ -0,0 +1,33 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+appender.console.type = Console
+appender.console.name = console
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-core-xml-test.log
+appender.file.append = true
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
+rootLogger.level = INFO
+
+rootLogger.appenderRef.file.ref = file
+#rootLogger.appenderRef.console.ref = console


[camel] 03/03: Fix usage of deprecated mockito method

Posted by lb...@apache.org.
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 702a6b21e1bc490865097cb3b86f95da74c441e2
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Wed Mar 18 11:58:40 2020 +0100

    Fix usage of deprecated mockito method
---
 .../camel/openapi/RestOpenApiSupportTest.java      | 26 +++++++++++-----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiSupportTest.java b/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiSupportTest.java
index 1a22e1a..cc39457 100644
--- a/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiSupportTest.java
+++ b/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiSupportTest.java
@@ -37,7 +37,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.params.provider.Arguments.arguments;
 import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
 
 public class RestOpenApiSupportTest {
 
@@ -53,14 +53,14 @@ public class RestOpenApiSupportTest {
         headers.put(RestOpenApiSupport.HEADER_X_FORWARDED_PROTO, "http, HTTPS ");
         RestOpenApiSupport.setupXForwardedHeaders(openApi, headers);
 
-        
+
         assertEquals(openApi.basePath, "/prefix/base");
         assertEquals(openApi.host, "host");
         assertTrue(openApi.schemes.contains("http"));
         assertTrue(openApi.schemes.contains("https"));
-            
+
     }
-    
+
     @Test
     public void shouldAdaptFromXForwardHeadersV3() {
         Oas30Document doc = new Oas30Document();
@@ -73,11 +73,11 @@ public class RestOpenApiSupportTest {
         headers.put(RestOpenApiSupport.HEADER_X_FORWARDED_PROTO, "http, HTTPS ");
         RestOpenApiSupport.setupXForwardedHeaders(openApi, headers);
 
-        
+
         assertEquals(openApi.getServers().get(0).url, "http://host/prefix/base");
         assertEquals(openApi.getServers().get(1).url, "https://host/prefix/base");
-       
-            
+
+
     }
 
     @ParameterizedTest
@@ -94,7 +94,7 @@ public class RestOpenApiSupportTest {
 
         assertEquals(openApi.basePath, expected);
     }
-    
+
     @ParameterizedTest
     @MethodSource("basePathAndPrefixVariations")
     public void shouldAdaptWithVaryingBasePathsAndPrefixesV3(final String prefix, final String basePath,
@@ -127,15 +127,15 @@ public class RestOpenApiSupportTest {
         }
 
     }
-    
+
     @ParameterizedTest
     @MethodSource("schemeVariations")
     public void shouldAdaptWithVaryingSchemesV3(final String xForwardedScheme, final String[] expected) {
         final Oas30Document openApi = spy(new Oas30Document());
-        
+
         RestOpenApiSupport.setupXForwardedHeaders(openApi,
             Collections.singletonMap(RestOpenApiSupport.HEADER_X_FORWARDED_PROTO, xForwardedScheme));
-        
+
         List<String> schemas = new ArrayList<String>();
         if (openApi.servers != null) {
             for (Server server : openApi.servers) {
@@ -144,7 +144,7 @@ public class RestOpenApiSupportTest {
                     schemas.add(url.getProtocol());
                 } catch (MalformedURLException e) {
 
-                    
+
                 }
             }
         }
@@ -160,7 +160,7 @@ public class RestOpenApiSupportTest {
 
         RestOpenApiSupport.setupXForwardedHeaders(openApi, Collections.emptyMap());
 
-        verifyZeroInteractions(openApi);
+        verifyNoInteractions(openApi);
     }
 
     static Stream<Arguments> basePathAndPrefixVariations() {