You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2020/03/18 12:30:44 UTC

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

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

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

commit c4aadb30a12a204d33fd75007d8cbbd353912c69
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Tue Mar 17 11:55:04 2020 +0100

    CAMEL-13844 RestConfiguration - Make it simpler and only have one
---
 components/camel-coap/pom.xml                      |  5 --
 .../java/org/apache/camel/coap/CoAPComponent.java  |  3 +-
 .../camel/coap/CoAPRestComponentTestBase.java      |  2 +-
 .../apache/camel/coap/CoAPRestContextPathTest.java |  2 +-
 .../apache/camel/component/http/HttpComponent.java |  9 +-
 .../camel/component/jetty/JettyHttpComponent.java  | 17 ++--
 .../jetty/rest/RestHttpsClientAuthRouteTest.java   |  2 +-
 .../rest/RestJettyRemoveAddRestAndRouteTest.java   |  2 +-
 .../component/netty/http/NettyHttpComponent.java   | 19 ++---
 .../camel/openapi/OpenApiRestProducerFactory.java  | 24 +++---
 .../platform/http/PlatformHttpComponent.java       |  7 +-
 .../rest/openapi/RestOpenApiEndpoint.java          | 97 +++++++++-------------
 .../rest/openapi/RestOpenApiEndpointTest.java      | 23 ++---
 .../rest/openapi/RestOpenApiEndpointV3Test.java    | 33 +++-----
 .../rest/swagger/RestSwaggerEndpoint.java          | 29 ++-----
 .../rest/swagger/RestSwaggerEndpointTest.java      | 11 +--
 .../camel/component/rest/DefaultRestRegistry.java  | 18 ++--
 .../camel/component/rest/RestApiComponent.java     |  2 +-
 .../camel/component/rest/RestApiEndpoint.java      | 13 +--
 .../apache/camel/component/rest/RestComponent.java | 81 +-----------------
 .../apache/camel/component/rest/RestEndpoint.java  | 14 ++--
 .../camel/component/servlet/ServletComponent.java  | 12 +--
 .../component/sparkrest/SparkRestComponent.java    | 17 ++--
 .../camel/swagger/SwaggerRestProducerFactory.java  |  8 +-
 .../component/undertow/UndertowComponent.java      | 25 +++---
 .../camel/component/webhook/WebhookComponent.java  |  4 +-
 .../main/java/org/apache/camel/CamelContext.java   | 30 +------
 .../org/apache/camel/spi/RestConfiguration.java    |  4 +-
 .../camel/impl/engine/AbstractCamelContext.java    | 53 +++++-------
 .../org/apache/camel/builder/RouteBuilder.java     | 72 ++++++----------
 .../camel/impl/lw/ImmutableCamelContext.java       | 17 ----
 .../impl/lw/RuntimeImmutableCamelContext.java      | 15 ----
 .../org/apache/camel/model/rest/RestConstants.java | 24 ------
 .../apache/camel/model/rest/RestDefinition.java    | 23 ++---
 .../camel/reifier/rest/RestBindingReifier.java     |  3 +-
 .../core/xml/AbstractCamelContextFactoryBean.java  | 32 +++----
 .../apache/camel/support/CamelContextHelper.java   | 49 +++++++++++
 37 files changed, 295 insertions(+), 506 deletions(-)

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