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

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

commit ecffb32c27df4ece0e16bc7e9a1dbed4434ef2ba
Author: Guillaume Nodet <gno...@gmail.com>
AuthorDate: Mon May 13 16:36:26 2019 +0200

    [CAMEL-13511] Introduce a Model interface to hold definitions related 
methods
---
 .../blueprint/handler/CamelNamespaceHandler.java   |   6 +-
 .../org/apache/camel/cdi/CdiCamelExtension.java    |   4 +-
 .../cdi/test/XmlServiceCallConfigurationTest.java  |   6 +-
 .../HipchatXmlDefinedComponentProducerTest.java    |   4 +-
 .../hystrix/processor/HystrixReifier.java          |   6 +-
 .../processor/HystrixHierarchicalConfigTest.java   |   8 +-
 .../policy/InfinispanRoutePolicyTestBase.java      |   6 +-
 .../apache/camel/component/kura/KuraRouter.java    |   4 +-
 .../camel/component/kura/KuraRouterTest.java       |   4 +-
 .../apache/camel/spring/boot/RoutesCollector.java  |   6 +-
 .../boot/actuate/endpoint/CamelRoutesEndpoint.java |   4 +-
 .../rest/RestUndertowHttpPojoTypeTest.java         |   4 +-
 .../MultiMasterCuratorLeaderRoutePolicyTest.java   |   6 +-
 .../main/java/org/apache/camel/CamelContext.java   |   2 +-
 .../camel/impl/engine/AbstractCamelContext.java    |   7 +-
 .../impl/cloud/ServiceCallProcessorFactory.java    |   6 +-
 .../apache/camel/builder/TransformerBuilder.java   |   4 +-
 .../org/apache/camel/builder/ValidatorBuilder.java |   4 +-
 .../camel/impl/AbstractModelCamelContext.java      | 262 ++++++---------------
 ...actModelCamelContext.java => DefaultModel.java} | 175 ++++----------
 .../apache/camel/impl/ReloadStrategySupport.java   |   4 +-
 .../java/org/apache/camel/main/MainSupport.java    |   4 +-
 .../model/{ModelCamelContext.java => Model.java}   |  25 +-
 .../org/apache/camel/model/ModelCamelContext.java  | 226 +-----------------
 .../apache/camel/model/RouteDefinitionHelper.java  |   8 +-
 .../org/apache/camel/reifier/RouteReifier.java     |   2 +-
 .../reifier/dataformat/DataFormatReifier.java      |   4 +-
 .../camel/component/log/LogListenerTest.java       |   3 +-
 .../apache/camel/impl/StartAndStopRoutesTest.java  |   4 +-
 .../apache/camel/processor/LogEipListenerTest.java |   3 +-
 .../aggregator/AbstractDistributedTest.java        |   3 +-
 .../camel/management/ManagedCamelContextImpl.java  |   6 +-
 .../management/mbean/ModelCamelContextHelper.java  |   4 +-
 .../management/RemoveRouteDefinitionTest.java      |   6 +-
 .../commands/AbstractLocalCamelController.java     |   6 +-
 .../camel/commands/ContextListCommandTest.java     |   3 +-
 .../camel/commands/ValidatorListCommandTest.java   |   8 +-
 .../HystrixHierarchicalConfigurationTest.java      |   4 +-
 .../itest/DuplicateNamespacePrefixIssueTest.java   |   4 +-
 39 files changed, 212 insertions(+), 643 deletions(-)

diff --git 
a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
 
b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
index 78ea996..cbd683d 100644
--- 
a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
+++ 
b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
@@ -72,7 +72,7 @@ import org.apache.camel.model.ExpressionNode;
 import org.apache.camel.model.ExpressionSubElementDefinition;
 import org.apache.camel.model.FromDefinition;
 import org.apache.camel.model.MarshalDefinition;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.OnExceptionDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ResequenceDefinition;
@@ -1025,13 +1025,13 @@ public class CamelNamespaceHandler implements 
NamespaceHandler {
             Set<String> dataformats = new HashSet<>();
 
             // regular camel routes
-            for (RouteDefinition rd : 
camelContext.adapt(ModelCamelContext.class).getRouteDefinitions()) {
+            for (RouteDefinition rd : 
camelContext.getExtension(Model.class).getRouteDefinitions()) {
                 findInputComponents(rd.getInput(), components, languages, 
dataformats);
                 findOutputComponents(rd.getOutputs(), components, languages, 
dataformats);
             }
 
             // rest services can have embedded routes or a singular to
-            for (RestDefinition rd : 
camelContext.adapt(ModelCamelContext.class).getRestDefinitions()) {
+            for (RestDefinition rd : 
camelContext.getExtension(Model.class).getRestDefinitions()) {
                 for (VerbDefinition vd : rd.getVerbs()) {
                     Object o = vd.getToOrRoute();
                     if (o instanceof RouteDefinition) {
diff --git 
a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
 
b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
index 4098e09..ac557fd 100644
--- 
a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
+++ 
b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
@@ -76,7 +76,7 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.RouteContainer;
 import org.apache.camel.spi.CamelEvent;
 import org.slf4j.Logger;
@@ -453,7 +453,7 @@ public class CdiCamelExtension implements Extension {
                 if (route instanceof RoutesBuilder) {
                     context.addRoutes((RoutesBuilder) route);
                 } else if (route instanceof RouteContainer) {
-                    
context.adapt(ModelCamelContext.class).addRouteDefinitions(((RouteContainer) 
route).getRoutes());
+                    
context.getExtension(Model.class).addRouteDefinitions(((RouteContainer) 
route).getRoutes());
                 } else {
                     throw new IllegalArgumentException(
                         "Invalid routes type [" + 
routeBean.getBeanClass().getName() + "], "
diff --git 
a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java
 
b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java
index e9d5335..423f8da 100644
--- 
a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java
+++ 
b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java
@@ -22,7 +22,7 @@ import javax.inject.Inject;
 import org.apache.camel.CamelContext;
 import org.apache.camel.cdi.CdiCamelExtension;
 import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
 import 
org.apache.camel.model.cloud.StaticServiceCallServiceDiscoveryConfiguration;
 import org.jboss.arquillian.container.test.api.Deployment;
@@ -59,7 +59,7 @@ public class XmlServiceCallConfigurationTest {
 
     @Test
     public void testServiceDiscoveryConfiguration() {
-        ServiceCallConfigurationDefinition conf1 = 
context.adapt(ModelCamelContext.class).getServiceCallConfiguration("conf1");
+        ServiceCallConfigurationDefinition conf1 = 
context.getExtension(Model.class).getServiceCallConfiguration("conf1");
         assertNotNull("No ServiceCallConfiguration (1)", conf1);
         assertNotNull("No ServiceDiscoveryConfiguration (1)", 
conf1.getServiceDiscoveryConfiguration());
 
@@ -67,7 +67,7 @@ public class XmlServiceCallConfigurationTest {
         assertEquals(1, discovery1.getServers().size());
         assertEquals("localhost:9091", discovery1.getServers().get(0));
 
-        ServiceCallConfigurationDefinition conf2 = 
context.adapt(ModelCamelContext.class).getServiceCallConfiguration("conf2");
+        ServiceCallConfigurationDefinition conf2 = 
context.getExtension(Model.class).getServiceCallConfiguration("conf2");
         assertNotNull("No ServiceCallConfiguration (2)", conf2);
         assertNotNull("No ServiceDiscoveryConfiguration (2)", 
conf2.getServiceDiscoveryConfiguration());
 
diff --git 
a/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java
 
b/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java
index d9b27b5..6b6e119 100644
--- 
a/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java
+++ 
b/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java
@@ -20,7 +20,7 @@ import java.io.InputStream;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.test.junit4.CamelTestSupport;
@@ -59,7 +59,7 @@ public class HipchatXmlDefinedComponentProducerTest extends 
CamelTestSupport {
         // This test is all about ensuring the endpoint is configured 
correctly when using the XML DSL so this
         try (InputStream routes = 
getClass().getResourceAsStream("HipchatXmlDefinedComponentProducerTest-route.xml"))
 {
             RoutesDefinition routesDefinition = 
ModelHelper.loadRoutesDefinition(context, routes);
-            
context.adapt(ModelCamelContext.class).addRouteDefinition(routesDefinition.getRoutes().get(0));
+            
context.getExtension(Model.class).addRouteDefinition(routesDefinition.getRoutes().get(0));
         }
 
         return context;
diff --git 
a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
 
b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
index 081fbf5..5cb2a1d 100644
--- 
a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
+++ 
b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
@@ -30,7 +30,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.apache.camel.model.HystrixDefinition;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.IntrospectionSupport;
@@ -215,7 +215,7 @@ public class HystrixReifier extends 
ProcessorReifier<HystrixDefinition> {
         // Extract properties from default configuration, the one configured on
         // camel context takes the precedence over those in the registry
         loadProperties(properties, Suppliers.firstNotNull(
-            () -> 
camelContext.adapt(ModelCamelContext.class).getHystrixConfiguration(null),
+            () -> 
camelContext.getExtension(Model.class).getHystrixConfiguration(null),
             () -> lookup(camelContext, 
HystrixConstants.DEFAULT_HYSTRIX_CONFIGURATION_ID, 
HystrixConfigurationDefinition.class))
         );
 
@@ -225,7 +225,7 @@ public class HystrixReifier extends 
ProcessorReifier<HystrixDefinition> {
             final String ref = definition.getHystrixConfigurationRef();
 
             loadProperties(properties, Suppliers.firstNotNull(
-                () -> 
camelContext.adapt(ModelCamelContext.class).getHystrixConfiguration(ref),
+                () -> 
camelContext.getExtension(Model.class).getHystrixConfiguration(ref),
                 () -> mandatoryLookup(camelContext, ref, 
HystrixConfigurationDefinition.class))
             );
         }
diff --git 
a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java
 
b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java
index 9af6b6f..5c4c65b 100644
--- 
a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java
+++ 
b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.apache.camel.model.HystrixDefinition;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.support.SimpleRegistry;
 import org.junit.Assert;
 import org.junit.Test;
@@ -72,8 +72,8 @@ public class HystrixHierarchicalConfigTest {
         ref.setGroupKey("ref-group-key");
         ref.setCorePoolSize(5);
 
-        context.adapt(ModelCamelContext.class).setHystrixConfiguration(def);
-        
context.adapt(ModelCamelContext.class).addHystrixConfiguration("ref-hystrix", 
ref);
+        context.getExtension(Model.class).setHystrixConfiguration(def);
+        
context.getExtension(Model.class).addHystrixConfiguration("ref-hystrix", ref);
 
         final HystrixReifier reifier = new HystrixReifier(
                 new HystrixDefinition()
@@ -110,7 +110,7 @@ public class HystrixHierarchicalConfigTest {
         defReg.setThreadPoolKey("global-reg-thread-key");
         defReg.setCorePoolSize(20);
 
-        context.adapt(ModelCamelContext.class).setHystrixConfiguration(def);
+        context.getExtension(Model.class).setHystrixConfiguration(def);
 
         registry.bind(HystrixConstants.DEFAULT_HYSTRIX_CONFIGURATION_ID, 
defReg);
         registry.bind("ref-hystrix", ref);
diff --git 
a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicyTestBase.java
 
b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicyTestBase.java
index 9ce79f0..f222f9d 100644
--- 
a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicyTestBase.java
+++ 
b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicyTestBase.java
@@ -18,7 +18,7 @@ package org.apache.camel.component.infinispan.policy;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.support.service.ServiceHelper;
 import org.infinispan.commons.api.BasicCacheContainer;
@@ -55,13 +55,13 @@ abstract class InfinispanRoutePolicyTestBase {
             context = new DefaultCamelContext();
             context.start();
 
-            
context.adapt(ModelCamelContext.class).addRouteDefinition(RouteDefinition.fromUri("direct:r1").routePolicy(policy1).to("mock:p1"));
+            
context.getExtension(Model.class).addRouteDefinition(RouteDefinition.fromUri("direct:r1").routePolicy(policy1).to("mock:p1"));
 
             for (int i = 0; i < 10 && !policy1.isLeader(); i++) {
                 Thread.sleep(250);
             }
 
-            
context.adapt(ModelCamelContext.class).addRouteDefinition(RouteDefinition.fromUri("direct:r2").routePolicy(policy2).to("mock:p2"));
+            
context.getExtension(Model.class).addRouteDefinition(RouteDefinition.fromUri("direct:r2").routePolicy(policy2).to("mock:p2"));
 
             Assert.assertTrue(policy1.isLeader());
             Assert.assertFalse(policy2.isLeader());
diff --git 
a/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
 
b/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
index baed5f7..cebb191 100644
--- 
a/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
+++ 
b/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
@@ -25,7 +25,7 @@ import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.core.osgi.OsgiDefaultCamelContext;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -65,7 +65,7 @@ public abstract class KuraRouter extends RouteBuilder 
implements BundleActivator
                 Object routePropertyValue = 
camelKuraConfig.getProperties().get(camelXmlRoutesProperty());
                 if (routePropertyValue != null) {
                     InputStream routesXml = new 
ByteArrayInputStream(routePropertyValue.toString().getBytes());
-                    
camelContext.adapt(ModelCamelContext.class).addRouteDefinitions(routesXml);
+                    
camelContext.getExtension(Model.class).addRouteDefinitions(routesXml);
                 }
             }
 
diff --git 
a/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
 
b/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
index 1702a74..4799dfb 100644
--- 
a/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
+++ 
b/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
@@ -24,7 +24,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.commons.io.IOUtils;
 import org.junit.After;
 import org.junit.Assert;
@@ -123,7 +123,7 @@ public class KuraRouterTest extends Assert {
         router.start(router.bundleContext);
 
         // Then
-        
assertNotNull(router.camelContext.adapt(ModelCamelContext.class).getRouteDefinition("loaded"));
+        
assertNotNull(router.camelContext.getExtension(Model.class).getRouteDefinition("loaded"));
     }
 
     static class TestKuraRouter extends KuraRouter {
diff --git 
a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java
 
b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java
index 2bcce4c..36d88aa 100644
--- 
a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java
+++ 
b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java
@@ -30,7 +30,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.StartupListener;
 import org.apache.camel.main.MainDurationEventNotifier;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.CamelEvent.Type;
 import org.apache.camel.spi.EventNotifier;
@@ -296,7 +296,7 @@ public class RoutesCollector implements 
ApplicationListener<ContextRefreshedEven
                 Resource[] xmlRoutes = applicationContext.getResources(part);
                 for (Resource xmlRoute : xmlRoutes) {
                     LOG.debug("Found XML route: {}", xmlRoute);
-                    
camelContext.adapt(ModelCamelContext.class).addRouteDefinitions(xmlRoute.getInputStream());
+                    
camelContext.getExtension(Model.class).addRouteDefinitions(xmlRoute.getInputStream());
                 }
             } catch (FileNotFoundException e) {
                 LOG.debug("No XML routes found in {}. Skipping XML routes 
detection.", part);
@@ -311,7 +311,7 @@ public class RoutesCollector implements 
ApplicationListener<ContextRefreshedEven
             try {
                 final Resource[] xmlRests = 
applicationContext.getResources(part);
                 for (final Resource xmlRest : xmlRests) {
-                    
camelContext.adapt(ModelCamelContext.class).addRestDefinitions(xmlRest.getInputStream(),
 true);
+                    
camelContext.getExtension(Model.class).addRestDefinitions(xmlRest.getInputStream(),
 true);
                 }
             } catch (FileNotFoundException e) {
                 LOG.debug("No XML rests found in {}. Skipping XML rests 
detection.", part);
diff --git 
a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
 
b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
index f99eefb..ec11652 100644
--- 
a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
+++ 
b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
@@ -35,7 +35,7 @@ import org.apache.camel.StatefulService;
 import org.apache.camel.api.management.ManagedCamelContext;
 import org.apache.camel.api.management.mbean.ManagedRouteMBean;
 import org.apache.camel.api.management.mbean.RouteError;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RouteDefinition;
 import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
@@ -115,7 +115,7 @@ public class CamelRoutesEndpoint {
             throw new IllegalArgumentException("Read only: route dump is not 
permitted in read-only mode");
         }
 
-        RouteDefinition route = 
camelContext.adapt(ModelCamelContext.class).getRouteDefinition(id);
+        RouteDefinition route = 
camelContext.getExtension(Model.class).getRouteDefinition(id);
         if (route != null) {
             try {
                 return ModelHelper.dumpModelAsXml(camelContext, route);
diff --git 
a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java
 
b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java
index dd3f311..9db6700 100644
--- 
a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java
+++ 
b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java
@@ -26,7 +26,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.undertow.BaseUndertowTest;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.rest.RestBindingMode;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.VerbDefinition;
@@ -40,7 +40,7 @@ public class RestUndertowHttpPojoTypeTest extends 
BaseUndertowTest {
         // Wasn't clear if there's a way to put this test into camel-core just 
to test the model
         // perhaps without starting the Camel Context?
 
-        List<RestDefinition> restDefinitions = 
context().adapt(ModelCamelContext.class).getRestDefinitions();
+        List<RestDefinition> restDefinitions = 
context().getExtension(Model.class).getRestDefinitions();
         assertNotNull(restDefinitions);
         assertTrue(restDefinitions.size() > 0);
 
diff --git 
a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/policy/MultiMasterCuratorLeaderRoutePolicyTest.java
 
b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/policy/MultiMasterCuratorLeaderRoutePolicyTest.java
index 4be4bb3..05afc3f 100644
--- 
a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/policy/MultiMasterCuratorLeaderRoutePolicyTest.java
+++ 
b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/policy/MultiMasterCuratorLeaderRoutePolicyTest.java
@@ -26,7 +26,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.zookeeper.ZooKeeperTestSupport;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -272,9 +272,9 @@ public class MultiMasterCuratorLeaderRoutePolicyTest 
extends ZooKeeperTestSuppor
         first.shutdown();
         // let's find out who's active now:
 
-        CuratorMultiMasterLeaderRoutePolicy routePolicySecond = 
(CuratorMultiMasterLeaderRoutePolicy) 
arr[0].controlledContext.adapt(ModelCamelContext.class)
+        CuratorMultiMasterLeaderRoutePolicy routePolicySecond = 
(CuratorMultiMasterLeaderRoutePolicy) 
arr[0].controlledContext.getExtension(Model.class)
                                                                 
.getRouteDefinition(secondDestination).getRoutePolicies().get(0);
-        CuratorMultiMasterLeaderRoutePolicy routePolicyThird = 
(CuratorMultiMasterLeaderRoutePolicy) 
arr[1].controlledContext.adapt(ModelCamelContext.class)
+        CuratorMultiMasterLeaderRoutePolicy routePolicyThird = 
(CuratorMultiMasterLeaderRoutePolicy) 
arr[1].controlledContext.getExtension(Model.class)
                                                                 
.getRouteDefinition(thirdDestination).getRoutePolicies().get(0);
 
         MultiMasterZookeeperPolicyEnforcedContext newMaster = null;
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 a9a5fa9..5a92a38 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
@@ -98,7 +98,7 @@ import org.apache.camel.support.jsse.SSLContextParameters;
  * End users are advised to use suspend/resume. Using stop is for shutting 
down Camel and it's not guaranteed that
  * when it's being started again using the start method that Camel will 
operate consistently.
  */
-public interface CamelContext extends SuspendableService, RuntimeConfiguration 
{
+public interface CamelContext extends StatefulService, RuntimeConfiguration {
 
     /**
      * Adapts this {@link org.apache.camel.CamelContext} to the specialized 
type.
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 d41c5d7..29b6ff8 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
@@ -329,6 +329,9 @@ public abstract class AbstractCamelContext extends 
ServiceSupport implements Cam
 
     @Override
     public <T> T getExtension(Class<T> type) {
+        if (type.isInstance(this)) {
+            return type.cast(this);
+        }
         Object extension = extensions.get(type);
         if (extension instanceof Supplier) {
             extension = ((Supplier)extension).get();
@@ -981,7 +984,7 @@ public abstract class AbstractCamelContext extends 
ServiceSupport implements Cam
         return answer != null && answer;
     }
 
-    protected void setStartingRoutes(boolean starting) {
+    public void setStartingRoutes(boolean starting) {
         if (starting) {
             isStartingRoutes.set(true);
         } else {
@@ -2721,7 +2724,7 @@ public abstract class AbstractCamelContext extends 
ServiceSupport implements Cam
     /**
      * Starts the given route service
      */
-    protected synchronized void startRouteService(BaseRouteService 
routeService, boolean addingRoutes) throws Exception {
+    public synchronized void startRouteService(BaseRouteService routeService, 
boolean addingRoutes) throws Exception {
         // we may already be starting routes so remember this, so we can unset
         // accordingly in finally block
         boolean alreadyStartingRoutes = isStartingRoutes();
diff --git 
a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java
 
b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java
index 20604a4..54f422a 100644
--- 
a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java
+++ 
b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java
@@ -33,7 +33,7 @@ import org.apache.camel.cloud.ServiceFilter;
 import org.apache.camel.cloud.ServiceFilterAware;
 import org.apache.camel.cloud.ServiceLoadBalancer;
 import org.apache.camel.impl.engine.TypedProcessorFactory;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
 import org.apache.camel.model.cloud.ServiceCallDefinition;
 import org.apache.camel.model.cloud.ServiceCallDefinitionConstants;
@@ -134,7 +134,7 @@ public class ServiceCallProcessorFactory extends 
TypedProcessorFactory<ServiceCa
 
     private ServiceCallConfigurationDefinition 
retrieveDefaultConfig(CamelContext camelContext) {
         // check if a default configuration is bound to the registry
-        ServiceCallConfigurationDefinition config = 
camelContext.adapt(ModelCamelContext.class).getServiceCallConfiguration(null);
+        ServiceCallConfigurationDefinition config = 
camelContext.getExtension(Model.class).getServiceCallConfiguration(null);
 
         if (config == null) {
             // Or if it is in the registry
@@ -158,7 +158,7 @@ public class ServiceCallProcessorFactory extends 
TypedProcessorFactory<ServiceCa
             config = lookup(camelContext, definition.getConfigurationRef(), 
ServiceCallConfigurationDefinition.class);
             if (config == null) {
                 // and fallback as service configuration
-                config = 
camelContext.adapt(ModelCamelContext.class).getServiceCallConfiguration(definition.getConfigurationRef());
+                config = 
camelContext.getExtension(Model.class).getServiceCallConfiguration(definition.getConfigurationRef());
             }
         }
 
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/builder/TransformerBuilder.java
 
b/core/camel-core/src/main/java/org/apache/camel/builder/TransformerBuilder.java
index b0b4129..cad5f96 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/builder/TransformerBuilder.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/builder/TransformerBuilder.java
@@ -18,7 +18,7 @@ package org.apache.camel.builder;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.transformer.CustomTransformerDefinition;
 import org.apache.camel.model.transformer.DataFormatTransformerDefinition;
 import org.apache.camel.model.transformer.EndpointTransformerDefinition;
@@ -181,6 +181,6 @@ public class TransformerBuilder {
             transformer.setToType(to);
         }
         
-        
camelContext.adapt(ModelCamelContext.class).getTransformers().add(transformer);
+        
camelContext.getExtension(Model.class).getTransformers().add(transformer);
     }
 }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/builder/ValidatorBuilder.java 
b/core/camel-core/src/main/java/org/apache/camel/builder/ValidatorBuilder.java
index fc11c7c..491044f 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/builder/ValidatorBuilder.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/builder/ValidatorBuilder.java
@@ -19,7 +19,7 @@ package org.apache.camel.builder;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.model.validator.CustomValidatorDefinition;
 import org.apache.camel.model.validator.EndpointValidatorDefinition;
@@ -162,6 +162,6 @@ public class ValidatorBuilder {
         }
         
         validator.setType(type);
-        
camelContext.adapt(ModelCamelContext.class).getValidators().add(validator);
+        camelContext.getExtension(Model.class).getValidators().add(validator);
     }
 }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
 
b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
index 0a5fd78..7f6e2ae 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
@@ -17,21 +17,14 @@
 package org.apache.camel.impl;
 
 import java.io.InputStream;
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
 
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.CatalogCamelContext;
-import org.apache.camel.FailedToStartRouteException;
 import org.apache.camel.Processor;
-import org.apache.camel.Route;
 import org.apache.camel.builder.ErrorHandlerBuilderSupport;
 import org.apache.camel.health.HealthCheckRegistry;
 import org.apache.camel.impl.engine.AbstractCamelContext;
@@ -40,20 +33,15 @@ import org.apache.camel.impl.transformer.TransformerKey;
 import org.apache.camel.impl.validator.ValidatorKey;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.model.HystrixConfigurationDefinition;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.ProcessorDefinitionHelper;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteDefinitionHelper;
-import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
 import org.apache.camel.model.rest.RestDefinition;
-import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
 import org.apache.camel.processor.MulticastProcessor;
-import org.apache.camel.reifier.RouteReifier;
 import org.apache.camel.reifier.dataformat.DataFormatReifier;
 import org.apache.camel.runtimecatalog.RuntimeCamelCatalog;
 import org.apache.camel.spi.DataFormat;
@@ -67,16 +55,10 @@ import org.apache.camel.support.CamelContextHelper;
  */
 public abstract class AbstractModelCamelContext extends AbstractCamelContext 
implements ModelCamelContext, CatalogCamelContext {
 
-    private final List<RouteDefinition> routeDefinitions = new ArrayList<>();
-    private final List<RestDefinition> restDefinitions = new ArrayList<>();
-    private Map<String, DataFormatDefinition> dataFormats = new HashMap<>();
-    private List<TransformerDefinition> transformers = new ArrayList<>();
-    private List<ValidatorDefinition> validators = new ArrayList<>();
-    private Map<String, ServiceCallConfigurationDefinition> 
serviceCallConfigurations = new ConcurrentHashMap<>();
-    private Map<String, HystrixConfigurationDefinition> hystrixConfigurations 
= new ConcurrentHashMap<>();
+    private final Model model = new DefaultModel(this);
 
     /**
-     * Creates the {@link CamelContext} using
+     * Creates the {@link ModelCamelContext} using
      * {@link org.apache.camel.support.DefaultRegistry} as registry.
      * <p/>
      * Use one of the other constructors to force use an explicit registry.
@@ -86,7 +68,7 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
     }
 
     /**
-     * Creates the {@link CamelContext} using the given registry
+     * Creates the {@link ModelCamelContext} using the given registry
      *
      * @param registry the registry
      */
@@ -106,202 +88,139 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
         }
     }
 
-    public void addRouteDefinitions(InputStream is) throws Exception {
-        RoutesDefinition def = ModelHelper.loadRoutesDefinition(this, is);
-        if (def != null) {
-            addRouteDefinitions(def.getRoutes());
-        }
+    @Override
+    public List<RouteDefinition> getRouteDefinitions() {
+        return model.getRouteDefinitions();
     }
 
-    public synchronized void addRouteDefinitions(Collection<RouteDefinition> 
routeDefinitions) throws Exception {
-        if (routeDefinitions == null || routeDefinitions.isEmpty()) {
-            return;
-        }
-        removeRouteDefinitions(routeDefinitions);
-        this.routeDefinitions.addAll(routeDefinitions);
-        if (shouldStartRoutes()) {
-            startRouteDefinitions(routeDefinitions);
-        }
+    @Override
+    public RouteDefinition getRouteDefinition(String id) {
+        return model.getRouteDefinition(id);
     }
 
-    public void addRouteDefinition(RouteDefinition routeDefinition) throws 
Exception {
-        addRouteDefinitions(Collections.singletonList(routeDefinition));
+    @Override
+    public void addRouteDefinitions(InputStream is) throws Exception {
+        model.addRouteDefinitions(is);
     }
 
-    public synchronized void 
removeRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws 
Exception {
-        for (RouteDefinition routeDefinition : routeDefinitions) {
-            removeRouteDefinition(routeDefinition);
-        }
+    @Override
+    public void addRouteDefinitions(Collection<RouteDefinition> 
routeDefinitions) throws Exception {
+        model.addRouteDefinitions(routeDefinitions);
     }
 
-    public synchronized void removeRouteDefinition(RouteDefinition 
routeDefinition) throws Exception {
-        RouteDefinition toBeRemoved = routeDefinition;
-        String id = routeDefinition.getId();
-        if (id != null) {
-            // remove existing route
-            stopRoute(id);
-            removeRoute(id);
-            toBeRemoved = getRouteDefinition(id);
-        }
-        this.routeDefinitions.remove(toBeRemoved);
+    @Override
+    public void addRouteDefinition(RouteDefinition routeDefinition) throws 
Exception {
+        model.addRouteDefinition(routeDefinition);
     }
 
-    public synchronized List<RouteDefinition> getRouteDefinitions() {
-        return routeDefinitions;
+    @Override
+    public void removeRouteDefinitions(Collection<RouteDefinition> 
routeDefinitions) throws Exception {
+        model.removeRouteDefinitions(routeDefinitions);
     }
 
-    public synchronized RouteDefinition getRouteDefinition(String id) {
-        for (RouteDefinition route : routeDefinitions) {
-            if (route.idOrCreate(getNodeIdFactory()).equals(id)) {
-                return route;
-            }
-        }
-        return null;
+    @Override
+    public void removeRouteDefinition(RouteDefinition routeDefinition) throws 
Exception {
+        model.removeRouteDefinition(routeDefinition);
     }
 
-    public synchronized List<RestDefinition> getRestDefinitions() {
-        return restDefinitions;
+    @Override
+    public List<RestDefinition> getRestDefinitions() {
+        return model.getRestDefinitions();
     }
 
+    @Override
     public void addRestDefinitions(InputStream is, boolean addToRoutes) throws 
Exception {
-        RestsDefinition rests = ModelHelper.loadRestsDefinition(this, is);
-        if (rests != null) {
-            addRestDefinitions(rests.getRests(), addToRoutes);
-        }
+        model.addRestDefinitions(is, addToRoutes);
     }
 
-    public synchronized void addRestDefinitions(Collection<RestDefinition> 
restDefinitions, boolean addToRoutes) throws Exception {
-        if (restDefinitions == null || restDefinitions.isEmpty()) {
-            return;
-        }
-
-        this.restDefinitions.addAll(restDefinitions);
-        if (addToRoutes) {
-            // rests are also routes so need to add them there too
-            for (final RestDefinition restDefinition : restDefinitions) {
-                List<RouteDefinition> routeDefinitions = 
restDefinition.asRouteDefinition(this);
-                addRouteDefinitions(routeDefinitions);
-            }
-        }
+    @Override
+    public void addRestDefinitions(Collection<RestDefinition> restDefinitions, 
boolean addToRoutes) throws Exception {
+        model.addRestDefinitions(restDefinitions, addToRoutes);
     }
 
     @Override
-    public ServiceCallConfigurationDefinition 
getServiceCallConfiguration(String serviceName) {
-        if (serviceName == null) {
-            serviceName = "";
-        }
-
-        return serviceCallConfigurations.get(serviceName);
+    public void setDataFormats(Map<String, DataFormatDefinition> dataFormats) {
+        model.setDataFormats(dataFormats);
     }
 
     @Override
-    public void setServiceCallConfiguration(ServiceCallConfigurationDefinition 
configuration) {
-        serviceCallConfigurations.put("", configuration);
+    public Map<String, DataFormatDefinition> getDataFormats() {
+        return model.getDataFormats();
     }
 
     @Override
-    public void 
setServiceCallConfigurations(List<ServiceCallConfigurationDefinition> 
configurations) {
-        if (configurations != null) {
-            for (ServiceCallConfigurationDefinition configuration : 
configurations) {
-                serviceCallConfigurations.put(configuration.getId(), 
configuration);
-            }
-        }
+    public DataFormatDefinition resolveDataFormatDefinition(String name) {
+        return model.resolveDataFormatDefinition(name);
     }
 
     @Override
-    public void addServiceCallConfiguration(String serviceName, 
ServiceCallConfigurationDefinition configuration) {
-        serviceCallConfigurations.put(serviceName, configuration);
+    public ProcessorDefinition getProcessorDefinition(String id) {
+        return model.getProcessorDefinition(id);
     }
 
     @Override
-    public HystrixConfigurationDefinition getHystrixConfiguration(String id) {
-        if (id == null) {
-            id = "";
-        }
-
-        return hystrixConfigurations.get(id);
+    public <T extends ProcessorDefinition> T getProcessorDefinition(String id, 
Class<T> type) {
+        return model.getProcessorDefinition(id, type);
     }
 
     @Override
-    public void setHystrixConfiguration(HystrixConfigurationDefinition 
configuration) {
-        hystrixConfigurations.put("", configuration);
+    public void setValidators(List<ValidatorDefinition> validators) {
+        model.setValidators(validators);
     }
 
     @Override
-    public void setHystrixConfigurations(List<HystrixConfigurationDefinition> 
configurations) {
-        if (configurations != null) {
-            for (HystrixConfigurationDefinition configuration : 
configurations) {
-                hystrixConfigurations.put(configuration.getId(), 
configuration);
-            }
-        }
+    public HystrixConfigurationDefinition getHystrixConfiguration(String id) {
+        return model.getHystrixConfiguration(id);
     }
 
     @Override
-    public void addHystrixConfiguration(String id, 
HystrixConfigurationDefinition configuration) {
-        hystrixConfigurations.put(id, configuration);
+    public void setHystrixConfiguration(HystrixConfigurationDefinition 
configuration) {
+        model.setHystrixConfiguration(configuration);
     }
 
     @Override
-    public DataFormatDefinition resolveDataFormatDefinition(String name) {
-        // lookup type and create the data format from it
-        DataFormatDefinition type = lookup(this, name, 
DataFormatDefinition.class);
-        if (type == null && getDataFormats() != null) {
-            type = getDataFormats().get(name);
-        }
-        return type;
+    public void setHystrixConfigurations(List<HystrixConfigurationDefinition> 
configurations) {
+        model.setHystrixConfigurations(configurations);
     }
 
     @Override
-    public ProcessorDefinition getProcessorDefinition(String id) {
-        for (RouteDefinition route : getRouteDefinitions()) {
-            Iterator<ProcessorDefinition> it = 
ProcessorDefinitionHelper.filterTypeInOutputs(route.getOutputs(), 
ProcessorDefinition.class);
-            while (it.hasNext()) {
-                ProcessorDefinition proc = it.next();
-                if (id.equals(proc.getId())) {
-                    return proc;
-                }
-            }
-        }
-        return null;
+    public void addHystrixConfiguration(String id, 
HystrixConfigurationDefinition configuration) {
+        model.addHystrixConfiguration(id, configuration);
     }
 
     @Override
-    public <T extends ProcessorDefinition> T getProcessorDefinition(String id, 
Class<T> type) {
-        ProcessorDefinition answer = getProcessorDefinition(id);
-        if (answer != null) {
-            return type.cast(answer);
-        }
-        return null;
+    public List<ValidatorDefinition> getValidators() {
+        return model.getValidators();
     }
 
     @Override
-    public void setDataFormats(Map<String, DataFormatDefinition> dataFormats) {
-        this.dataFormats = dataFormats;
+    public void setTransformers(List<TransformerDefinition> transformers) {
+        model.setTransformers(transformers);
     }
 
     @Override
-    public Map<String, DataFormatDefinition> getDataFormats() {
-        return dataFormats;
+    public List<TransformerDefinition> getTransformers() {
+        return model.getTransformers();
     }
 
     @Override
-    public void setTransformers(List<TransformerDefinition> transformers) {
-        this.transformers = transformers;
+    public ServiceCallConfigurationDefinition 
getServiceCallConfiguration(String serviceName) {
+        return model.getServiceCallConfiguration(serviceName);
     }
 
     @Override
-    public List<TransformerDefinition> getTransformers() {
-        return transformers;
+    public void setServiceCallConfiguration(ServiceCallConfigurationDefinition 
configuration) {
+        model.setServiceCallConfiguration(configuration);
     }
 
     @Override
-    public void setValidators(List<ValidatorDefinition> validators) {
-        this.validators = validators;
+    public void 
setServiceCallConfigurations(List<ServiceCallConfigurationDefinition> 
configurations) {
+        model.setServiceCallConfigurations(configurations);
     }
 
     @Override
-    public List<ValidatorDefinition> getValidators() {
-        return validators;
+    public void addServiceCallConfiguration(String serviceName, 
ServiceCallConfigurationDefinition configuration) {
+        model.addServiceCallConfiguration(serviceName, configuration);
     }
 
     protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() throws 
Exception {
@@ -326,18 +245,10 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
         super.doStartEagerServices();
     }
 
-    protected void startRouteDefinitions(Collection<RouteDefinition> list) 
throws Exception {
-        if (list != null) {
-            for (RouteDefinition route : list) {
-                startRoute(route);
-            }
-        }
-    }
-
     protected void bindDataFormats() throws Exception {
         // eager lookup data formats and bind to registry so the dataformats 
can
         // be looked up and used
-        for (Map.Entry<String, DataFormatDefinition> e : 
dataFormats.entrySet()) {
+        for (Map.Entry<String, DataFormatDefinition> e : 
model.getDataFormats().entrySet()) {
             String id = e.getKey();
             DataFormatDefinition def = e.getValue();
             log.debug("Creating Dataformat with id: {} and definition: {}", 
id, def);
@@ -347,41 +258,14 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
         }
     }
 
-    public void startRoute(RouteDefinition routeDefinition) throws Exception {
-        // assign ids to the routes and validate that the id's is all unique
-        RouteDefinitionHelper.forceAssignIds(this, routeDefinitions);
-        String duplicate = 
RouteDefinitionHelper.validateUniqueIds(routeDefinition, routeDefinitions);
-        if (duplicate != null) {
-            throw new FailedToStartRouteException(routeDefinition.getId(), 
"duplicate id detected: " + duplicate + ". Please correct ids to be unique 
among all your routes.");
-        }
-
-        // indicate we are staring the route using this thread so
-        // we are able to query this if needed
-        setStartingRoutes(true);
-        try {
-            // must ensure route is prepared, before we can start it
-            if (!routeDefinition.isPrepared()) {
-                RouteDefinitionHelper.prepareRoute(this, routeDefinition);
-                routeDefinition.markPrepared();
-            }
-
-            Route route = new RouteReifier(routeDefinition).addRoutes(this);
-            RouteService routeService = new RouteService(this, 
routeDefinition, route.getRouteContext(), route);
-            startRouteService(routeService, true);
-        } finally {
-            // we are done staring routes
-            setStartingRoutes(false);
-        }
-    }
-
     protected synchronized void shutdownRouteService(BaseRouteService 
routeService) throws Exception {
         // remove the route from ErrorHandlerBuilder if possible
         if (getErrorHandlerFactory() instanceof ErrorHandlerBuilderSupport) {
-            ErrorHandlerBuilderSupport builder = 
(ErrorHandlerBuilderSupport)getErrorHandlerFactory();
+            ErrorHandlerBuilderSupport builder = (ErrorHandlerBuilderSupport) 
getErrorHandlerFactory();
             builder.removeOnExceptionList(routeService.getId());
         }
         if (routeService instanceof RouteService) {
-            routeDefinitions.removeIf(route -> route == ((RouteService) 
routeService).getRouteDefinition());
+            model.getRouteDefinitions().remove(((RouteService) 
routeService).getRouteDefinition());
         }
         super.shutdownRouteService(routeService);
     }
@@ -389,7 +273,7 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
     protected boolean isStreamCachingInUse() throws Exception {
         boolean streamCachingInUse = super.isStreamCachingInUse();
         if (!streamCachingInUse) {
-            for (RouteDefinition route : routeDefinitions) {
+            for (RouteDefinition route : model.getRouteDefinitions()) {
                 Boolean routeCache = CamelContextHelper.parseBoolean(this, 
route.getStreamCache());
                 if (routeCache != null && routeCache) {
                     streamCachingInUse = true;
@@ -401,8 +285,8 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
     }
 
     @Override
-    protected void startRouteDefinitions() throws Exception {
-        startRouteDefinitions(routeDefinitions);
+    public void startRouteDefinitions() throws Exception {
+        model.startRouteDefinitions();
     }
 
     @Override
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
 b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
similarity index 64%
copy from 
core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
copy to core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
index 0a5fd78..fba6394 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -25,21 +25,13 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
 
-import org.apache.camel.AsyncProcessor;
-import org.apache.camel.CatalogCamelContext;
+import org.apache.camel.CamelContext;
 import org.apache.camel.FailedToStartRouteException;
-import org.apache.camel.Processor;
 import org.apache.camel.Route;
-import org.apache.camel.builder.ErrorHandlerBuilderSupport;
-import org.apache.camel.health.HealthCheckRegistry;
-import org.apache.camel.impl.engine.AbstractCamelContext;
-import org.apache.camel.impl.engine.BaseRouteService;
-import org.apache.camel.impl.transformer.TransformerKey;
-import org.apache.camel.impl.validator.ValidatorKey;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.model.HystrixConfigurationDefinition;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.ProcessorDefinition;
@@ -52,20 +44,11 @@ import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
-import org.apache.camel.processor.MulticastProcessor;
 import org.apache.camel.reifier.RouteReifier;
-import org.apache.camel.reifier.dataformat.DataFormatReifier;
-import org.apache.camel.runtimecatalog.RuntimeCamelCatalog;
-import org.apache.camel.spi.DataFormat;
-import org.apache.camel.spi.Registry;
-import org.apache.camel.spi.TransformerRegistry;
-import org.apache.camel.spi.ValidatorRegistry;
-import org.apache.camel.support.CamelContextHelper;
-
-/**
- * Represents the context used to configure routes and the policies to use.
- */
-public abstract class AbstractModelCamelContext extends AbstractCamelContext 
implements ModelCamelContext, CatalogCamelContext {
+
+public class DefaultModel implements Model {
+
+    private final CamelContext camelContext;
 
     private final List<RouteDefinition> routeDefinitions = new ArrayList<>();
     private final List<RestDefinition> restDefinitions = new ArrayList<>();
@@ -75,39 +58,12 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
     private Map<String, ServiceCallConfigurationDefinition> 
serviceCallConfigurations = new ConcurrentHashMap<>();
     private Map<String, HystrixConfigurationDefinition> hystrixConfigurations 
= new ConcurrentHashMap<>();
 
-    /**
-     * Creates the {@link CamelContext} using
-     * {@link org.apache.camel.support.DefaultRegistry} as registry.
-     * <p/>
-     * Use one of the other constructors to force use an explicit registry.
-     */
-    public AbstractModelCamelContext() {
-        this(true);
-    }
-
-    /**
-     * Creates the {@link CamelContext} using the given registry
-     *
-     * @param registry the registry
-     */
-    public AbstractModelCamelContext(Registry registry) {
-        this();
-        setRegistry(registry);
-    }
-
-    public AbstractModelCamelContext(boolean init) {
-        super(false);
-
-        setDefaultExtension(HealthCheckRegistry.class, 
this::createHealthCheckRegistry);
-        setDefaultExtension(RuntimeCamelCatalog.class, 
this::createRuntimeCamelCatalog);
-
-        if (init) {
-            init();
-        }
+    public DefaultModel(CamelContext camelContext) {
+        this.camelContext = camelContext;
     }
 
     public void addRouteDefinitions(InputStream is) throws Exception {
-        RoutesDefinition def = ModelHelper.loadRoutesDefinition(this, is);
+        RoutesDefinition def = ModelHelper.loadRoutesDefinition(camelContext, 
is);
         if (def != null) {
             addRouteDefinitions(def.getRoutes());
         }
@@ -139,8 +95,8 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
         String id = routeDefinition.getId();
         if (id != null) {
             // remove existing route
-            stopRoute(id);
-            removeRoute(id);
+            camelContext.getRouteController().stopRoute(id);
+            camelContext.removeRoute(id);
             toBeRemoved = getRouteDefinition(id);
         }
         this.routeDefinitions.remove(toBeRemoved);
@@ -152,7 +108,7 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
 
     public synchronized RouteDefinition getRouteDefinition(String id) {
         for (RouteDefinition route : routeDefinitions) {
-            if (route.idOrCreate(getNodeIdFactory()).equals(id)) {
+            if (route.idOrCreate(camelContext.getNodeIdFactory()).equals(id)) {
                 return route;
             }
         }
@@ -164,7 +120,7 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
     }
 
     public void addRestDefinitions(InputStream is, boolean addToRoutes) throws 
Exception {
-        RestsDefinition rests = ModelHelper.loadRestsDefinition(this, is);
+        RestsDefinition rests = ModelHelper.loadRestsDefinition(camelContext, 
is);
         if (rests != null) {
             addRestDefinitions(rests.getRests(), addToRoutes);
         }
@@ -179,7 +135,7 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
         if (addToRoutes) {
             // rests are also routes so need to add them there too
             for (final RestDefinition restDefinition : restDefinitions) {
-                List<RouteDefinition> routeDefinitions = 
restDefinition.asRouteDefinition(this);
+                List<RouteDefinition> routeDefinitions = 
restDefinition.asRouteDefinition(camelContext);
                 addRouteDefinitions(routeDefinitions);
             }
         }
@@ -244,7 +200,7 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
     @Override
     public DataFormatDefinition resolveDataFormatDefinition(String name) {
         // lookup type and create the data format from it
-        DataFormatDefinition type = lookup(this, name, 
DataFormatDefinition.class);
+        DataFormatDefinition type = lookup(camelContext, name, 
DataFormatDefinition.class);
         if (type == null && getDataFormats() != null) {
             type = getDataFormats().get(name);
         }
@@ -304,26 +260,8 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
         return validators;
     }
 
-    protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() throws 
Exception {
-        return new DefaultValidatorRegistry(this, getValidators());
-    }
-
-    protected TransformerRegistry<TransformerKey> createTransformerRegistry() 
throws Exception {
-        return new DefaultTransformerRegistry(this, getTransformers());
-    }
-
-    protected abstract HealthCheckRegistry createHealthCheckRegistry();
-
-    protected abstract RuntimeCamelCatalog createRuntimeCamelCatalog();
-
-    protected void doStartStandardServices() {
-        super.doStartStandardServices();
-        getExtension(RuntimeCamelCatalog.class);
-    }
-
-    protected void doStartEagerServices() {
-        getExtension(HealthCheckRegistry.class);
-        super.doStartEagerServices();
+    public void startRouteDefinitions() throws Exception {
+        startRouteDefinitions(routeDefinitions);
     }
 
     protected void startRouteDefinitions(Collection<RouteDefinition> list) 
throws Exception {
@@ -334,80 +272,49 @@ public abstract class AbstractModelCamelContext extends 
AbstractCamelContext imp
         }
     }
 
-    protected void bindDataFormats() throws Exception {
-        // eager lookup data formats and bind to registry so the dataformats 
can
-        // be looked up and used
-        for (Map.Entry<String, DataFormatDefinition> e : 
dataFormats.entrySet()) {
-            String id = e.getKey();
-            DataFormatDefinition def = e.getValue();
-            log.debug("Creating Dataformat with id: {} and definition: {}", 
id, def);
-            DataFormat df = 
DataFormatReifier.reifier(def).createDataFormat(this);
-            addService(df, true);
-            getRegistry().bind(id, df);
-        }
-    }
-
     public void startRoute(RouteDefinition routeDefinition) throws Exception {
         // assign ids to the routes and validate that the id's is all unique
-        RouteDefinitionHelper.forceAssignIds(this, routeDefinitions);
+        RouteDefinitionHelper.forceAssignIds(camelContext, routeDefinitions);
         String duplicate = 
RouteDefinitionHelper.validateUniqueIds(routeDefinition, routeDefinitions);
         if (duplicate != null) {
             throw new FailedToStartRouteException(routeDefinition.getId(), 
"duplicate id detected: " + duplicate + ". Please correct ids to be unique 
among all your routes.");
         }
 
+        // must ensure route is prepared, before we can start it
+        if (!routeDefinition.isPrepared()) {
+            RouteDefinitionHelper.prepareRoute(camelContext, routeDefinition);
+            routeDefinition.markPrepared();
+        }
+
         // indicate we are staring the route using this thread so
         // we are able to query this if needed
-        setStartingRoutes(true);
+        AbstractModelCamelContext mcc = 
camelContext.adapt(AbstractModelCamelContext.class);
+        mcc.setStartingRoutes(true);
         try {
-            // must ensure route is prepared, before we can start it
-            if (!routeDefinition.isPrepared()) {
-                RouteDefinitionHelper.prepareRoute(this, routeDefinition);
-                routeDefinition.markPrepared();
-            }
 
-            Route route = new RouteReifier(routeDefinition).addRoutes(this);
-            RouteService routeService = new RouteService(this, 
routeDefinition, route.getRouteContext(), route);
-            startRouteService(routeService, true);
+            Route route = new RouteReifier(routeDefinition).addRoutes(mcc);
+            RouteService routeService = new RouteService(mcc, routeDefinition, 
route.getRouteContext(), route);
+            mcc.startRouteService(routeService, true);
         } finally {
             // we are done staring routes
-            setStartingRoutes(false);
+            mcc.setStartingRoutes(false);
         }
     }
 
-    protected synchronized void shutdownRouteService(BaseRouteService 
routeService) throws Exception {
-        // remove the route from ErrorHandlerBuilder if possible
-        if (getErrorHandlerFactory() instanceof ErrorHandlerBuilderSupport) {
-            ErrorHandlerBuilderSupport builder = 
(ErrorHandlerBuilderSupport)getErrorHandlerFactory();
-            builder.removeOnExceptionList(routeService.getId());
-        }
-        if (routeService instanceof RouteService) {
-            routeDefinitions.removeIf(route -> route == ((RouteService) 
routeService).getRouteDefinition());
-        }
-        super.shutdownRouteService(routeService);
+    /**
+     * Should we start newly added routes?
+     */
+    protected boolean shouldStartRoutes() {
+        return camelContext.isStarted() && !camelContext.isStarting();
     }
 
-    protected boolean isStreamCachingInUse() throws Exception {
-        boolean streamCachingInUse = super.isStreamCachingInUse();
-        if (!streamCachingInUse) {
-            for (RouteDefinition route : routeDefinitions) {
-                Boolean routeCache = CamelContextHelper.parseBoolean(this, 
route.getStreamCache());
-                if (routeCache != null && routeCache) {
-                    streamCachingInUse = true;
-                    break;
-                }
-            }
+    protected static <T> T lookup(CamelContext context, String ref, Class<T> 
type) {
+        try {
+            return context.getRegistry().lookupByNameAndType(ref, type);
+        } catch (Exception e) {
+            // need to ignore not same type and return it as null
+            return null;
         }
-        return streamCachingInUse;
-    }
-
-    @Override
-    protected void startRouteDefinitions() throws Exception {
-        startRouteDefinitions(routeDefinitions);
-    }
-
-    @Override
-    public AsyncProcessor createMulticast(Collection<Processor> processors, 
ExecutorService executor, boolean shutdownExecutorService) {
-        return new MulticastProcessor(this, processors, null, true, executor, 
shutdownExecutorService, false, false, 0, null, false, false);
     }
 
 }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java
 
b/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java
index 75c9d82..1354b57 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java
@@ -30,7 +30,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedOperation;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
@@ -148,7 +148,7 @@ public abstract class ReloadStrategySupport extends 
ServiceSupport implements Re
                     log.warn("Routes with no id's detected. Its recommended to 
assign id's to your routes so Camel can reload the routes correctly.");
                 }
                 // update the routes (add will remove and shutdown first)
-                
camelContext.adapt(ModelCamelContext.class).addRouteDefinitions(routes);
+                
camelContext.getExtension(Model.class).addRouteDefinitions(routes);
 
                 log.info("Reloaded routes: [{}] from XML resource: {}", csb, 
name);
             } catch (Exception e) {
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/main/MainSupport.java 
b/core/camel-core/src/main/java/org/apache/camel/main/MainSupport.java
index 6e69390..c01451b 100644
--- a/core/camel-core/src/main/java/org/apache/camel/main/MainSupport.java
+++ b/core/camel-core/src/main/java/org/apache/camel/main/MainSupport.java
@@ -39,7 +39,7 @@ import org.apache.camel.Expression;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.FileWatcherReloadStrategy;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.DataFormat;
@@ -658,7 +658,7 @@ public abstract class MainSupport extends ServiceSupport {
     public List<RouteDefinition> getRouteDefinitions() {
         List<RouteDefinition> answer = new ArrayList<>();
         if (camelContext != null) {
-            
answer.addAll(camelContext.adapt(ModelCamelContext.class).getRouteDefinitions());
+            
answer.addAll(camelContext.getExtension(Model.class).getRouteDefinitions());
         }
         return answer;
     }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java 
b/core/camel-core/src/main/java/org/apache/camel/model/Model.java
similarity index 90%
copy from 
core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java
copy to core/camel-core/src/main/java/org/apache/camel/model/Model.java
index e2aaaca..47d6638 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/Model.java
@@ -28,9 +28,9 @@ import 
org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
 
 /**
- * Model level interface for the {@link CamelContext}
+ * Model interface
  */
-public interface ModelCamelContext extends CamelContext {
+public interface Model {
 
     /**
      * Returns a list of the current route definitions
@@ -50,8 +50,8 @@ public interface ModelCamelContext extends CamelContext {
     /**
      * Adds a collection of route definitions to the context
      * <p/>
-     * <b>Important: </b> Each route in the same {@link 
org.apache.camel.CamelContext} must have an <b>unique</b> route id.
-     * If you use the API from {@link org.apache.camel.CamelContext} or {@link 
org.apache.camel.model.ModelCamelContext} to add routes, then any
+     * <b>Important: </b> Each route in the same {@link CamelContext} must 
have an <b>unique</b> route id.
+     * If you use the API from {@link CamelContext} or {@link Model} to add 
routes, then any
      * new routes which has a route id that matches an old route, then the old 
route is replaced by the new route.
      *
      * @param is input stream with the route(s) definition to add
@@ -62,8 +62,8 @@ public interface ModelCamelContext extends CamelContext {
     /**
      * Adds a collection of route definitions to the context
      * <p/>
-     * <b>Important: </b> Each route in the same {@link 
org.apache.camel.CamelContext} must have an <b>unique</b> route id.
-     * If you use the API from {@link org.apache.camel.CamelContext} or {@link 
org.apache.camel.model.ModelCamelContext} to add routes, then any
+     * <b>Important: </b> Each route in the same {@link CamelContext} must 
have an <b>unique</b> route id.
+     * If you use the API from {@link CamelContext} or {@link Model} to add 
routes, then any
      * new routes which has a route id that matches an old route, then the old 
route is replaced by the new route.
      *
      * @param routeDefinitions the route(s) definition to add
@@ -74,8 +74,8 @@ public interface ModelCamelContext extends CamelContext {
     /**
      * Add a route definition to the context
      * <p/>
-     * <b>Important: </b> Each route in the same {@link 
org.apache.camel.CamelContext} must have an <b>unique</b> route id.
-     * If you use the API from {@link org.apache.camel.CamelContext} or {@link 
org.apache.camel.model.ModelCamelContext} to add routes, then any
+     * <b>Important: </b> Each route in the same {@link CamelContext} must 
have an <b>unique</b> route id.
+     * If you use the API from {@link CamelContext} or {@link Model} to add 
routes, then any
      * new routes which has a route id that matches an old route, then the old 
route is replaced by the new route.
      *
      * @param routeDefinition the route definition to add
@@ -162,7 +162,7 @@ public interface ModelCamelContext extends CamelContext {
      * @param id id of the processor definition
      * @param type the processor definition type
      * @return the processor definition or <tt>null</tt> if not found
-     * @throws java.lang.ClassCastException is thrown if the type is not 
correct type
+     * @throws ClassCastException is thrown if the type is not correct type
      */
     <T extends ProcessorDefinition> T getProcessorDefinition(String id, 
Class<T> type);
 
@@ -256,4 +256,11 @@ public interface ModelCamelContext extends CamelContext {
      */
     void addServiceCallConfiguration(String serviceName, 
ServiceCallConfigurationDefinition configuration);
 
+    /**
+     * Start all routes from this model.
+     *
+     * @throws Exception
+     */
+    void startRouteDefinitions() throws Exception;
+
 }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java 
b/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java
index e2aaaca..42245ba 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java
@@ -30,230 +30,6 @@ import org.apache.camel.model.validator.ValidatorDefinition;
 /**
  * Model level interface for the {@link CamelContext}
  */
-public interface ModelCamelContext extends CamelContext {
-
-    /**
-     * Returns a list of the current route definitions
-     *
-     * @return list of the current route definitions
-     */
-    List<RouteDefinition> getRouteDefinitions();
-
-    /**
-     * Gets the route definition with the given id
-     *
-     * @param id id of the route
-     * @return the route definition or <tt>null</tt> if not found
-     */
-    RouteDefinition getRouteDefinition(String id);
-
-    /**
-     * Adds a collection of route definitions to the context
-     * <p/>
-     * <b>Important: </b> Each route in the same {@link 
org.apache.camel.CamelContext} must have an <b>unique</b> route id.
-     * If you use the API from {@link org.apache.camel.CamelContext} or {@link 
org.apache.camel.model.ModelCamelContext} to add routes, then any
-     * new routes which has a route id that matches an old route, then the old 
route is replaced by the new route.
-     *
-     * @param is input stream with the route(s) definition to add
-     * @throws Exception if the route definitions could not be created for 
whatever reason
-     */
-    void addRouteDefinitions(InputStream is) throws Exception;
-
-    /**
-     * Adds a collection of route definitions to the context
-     * <p/>
-     * <b>Important: </b> Each route in the same {@link 
org.apache.camel.CamelContext} must have an <b>unique</b> route id.
-     * If you use the API from {@link org.apache.camel.CamelContext} or {@link 
org.apache.camel.model.ModelCamelContext} to add routes, then any
-     * new routes which has a route id that matches an old route, then the old 
route is replaced by the new route.
-     *
-     * @param routeDefinitions the route(s) definition to add
-     * @throws Exception if the route definitions could not be created for 
whatever reason
-     */
-    void addRouteDefinitions(Collection<RouteDefinition> routeDefinitions) 
throws Exception;
-
-    /**
-     * Add a route definition to the context
-     * <p/>
-     * <b>Important: </b> Each route in the same {@link 
org.apache.camel.CamelContext} must have an <b>unique</b> route id.
-     * If you use the API from {@link org.apache.camel.CamelContext} or {@link 
org.apache.camel.model.ModelCamelContext} to add routes, then any
-     * new routes which has a route id that matches an old route, then the old 
route is replaced by the new route.
-     *
-     * @param routeDefinition the route definition to add
-     * @throws Exception if the route definition could not be created for 
whatever reason
-     */
-    void addRouteDefinition(RouteDefinition routeDefinition) throws Exception;
-
-    /**
-     * Removes a collection of route definitions from the context - stopping 
any previously running
-     * routes if any of them are actively running
-     *
-     * @param routeDefinitions route(s) definitions to remove
-     * @throws Exception if the route definitions could not be removed for 
whatever reason
-     */
-    void removeRouteDefinitions(Collection<RouteDefinition> routeDefinitions) 
throws Exception;
-
-    /**
-     * Removes a route definition from the context - stopping any previously 
running
-     * routes if any of them are actively running
-     *
-     * @param routeDefinition route definition to remove
-     * @throws Exception if the route definition could not be removed for 
whatever reason
-     */
-    void removeRouteDefinition(RouteDefinition routeDefinition) throws 
Exception;
-
-    /**
-     * Returns a list of the current REST definitions
-     *
-     * @return list of the current REST definitions
-     */
-    List<RestDefinition> getRestDefinitions();
-
-    /**
-     * Adds a collection of rest definitions to the context
-     *
-     * @param is input stream with the rest(s) definition to add
-     * @param addToRoutes whether the rests should also automatically be added 
as routes
-     * @throws Exception if the rest definitions could not be created for 
whatever reason
-     */
-    void addRestDefinitions(InputStream is, boolean addToRoutes) throws 
Exception;
-
-    /**
-     * Adds a collection of rest definitions to the context
-     *
-     * @param restDefinitions the rest(s) definition to add
-     * @param addToRoutes whether the rests should also automatically be added 
as routes
-     * @throws Exception if the rest definitions could not be created for 
whatever reason
-     */
-    void addRestDefinitions(Collection<RestDefinition> restDefinitions, 
boolean addToRoutes) throws Exception;
-
-    /**
-     * Sets the data formats that can be referenced in the routes.
-     *
-     * @param dataFormats the data formats
-     */
-    void setDataFormats(Map<String, DataFormatDefinition> dataFormats);
-
-    /**
-     * Gets the data formats that can be referenced in the routes.
-     *
-     * @return the data formats available
-     */
-    Map<String, DataFormatDefinition> getDataFormats();
-
-    /**
-     * Resolve a data format definition given its name
-     *
-     * @param name the data format definition name or a reference to it in the 
{@link org.apache.camel.spi.Registry}
-     * @return the resolved data format definition, or <tt>null</tt> if not 
found
-     */
-    DataFormatDefinition resolveDataFormatDefinition(String name);
-
-    /**
-     * Gets the processor definition from any of the routes which with the 
given id
-     *
-     * @param id id of the processor definition
-     * @return the processor definition or <tt>null</tt> if not found
-     */
-    ProcessorDefinition getProcessorDefinition(String id);
-
-    /**
-     * Gets the processor definition from any of the routes which with the 
given id
-     *
-     * @param id id of the processor definition
-     * @param type the processor definition type
-     * @return the processor definition or <tt>null</tt> if not found
-     * @throws java.lang.ClassCastException is thrown if the type is not 
correct type
-     */
-    <T extends ProcessorDefinition> T getProcessorDefinition(String id, 
Class<T> type);
-
-    /**
-     * Sets the validators that can be referenced in the routes.
-     *
-     * @param validators the validators
-     */
-    void setValidators(List<ValidatorDefinition> validators);
-
-    /**
-     * Gets the Hystrix configuration by the given name. If no name is given
-     * the default configuration is returned, see 
<tt>setHystrixConfiguration</tt>
-     *
-     * @param id id of the configuration, or <tt>null</tt> to return the 
default configuration
-     * @return the configuration, or <tt>null</tt> if no configuration has 
been registered
-     */
-    HystrixConfigurationDefinition getHystrixConfiguration(String id);
-
-    /**
-     * Sets the default Hystrix configuration
-     *
-     * @param configuration the configuration
-     */
-    void setHystrixConfiguration(HystrixConfigurationDefinition configuration);
-
-    /**
-     * Sets the Hystrix configurations
-     *
-     * @param configurations the configuration list
-     */
-    void setHystrixConfigurations(List<HystrixConfigurationDefinition> 
configurations);
-
-    /**
-     * Adds the Hystrix configuration
-     *
-     * @param id name of the configuration
-     * @param configuration the configuration
-     */
-    void addHystrixConfiguration(String id, HystrixConfigurationDefinition 
configuration);
-
-    /**
-     * Gets the validators that can be referenced in the routes.
-     *
-     * @return the validators available
-     */
-    List<ValidatorDefinition> getValidators();
-
-    /**
-     * Sets the transformers that can be referenced in the routes.
-     *
-     * @param transformers the transformers
-     */
-    void setTransformers(List<TransformerDefinition> transformers);
-
-    /**
-     * Gets the transformers that can be referenced in the routes.
-     *
-     * @return the transformers available
-     */
-    List<TransformerDefinition> getTransformers();
-
-    /**
-     * Gets the service call configuration by the given name. If no name is 
given
-     * the default configuration is returned, see 
<tt>setServiceCallConfiguration</tt>
-     *
-     * @param serviceName name of service, or <tt>null</tt> to return the 
default configuration
-     * @return the configuration, or <tt>null</tt> if no configuration has 
been registered
-     */
-    ServiceCallConfigurationDefinition getServiceCallConfiguration(String 
serviceName);
-
-    /**
-     * Sets the default service call configuration
-     *
-     * @param configuration the configuration
-     */
-    void setServiceCallConfiguration(ServiceCallConfigurationDefinition 
configuration);
-
-    /**
-     * Sets the service call configurations
-     *
-     * @param configurations the configuration list
-     */
-    void setServiceCallConfigurations(List<ServiceCallConfigurationDefinition> 
configurations);
-
-    /**
-     * Adds the service call configuration
-     *
-     * @param serviceName name of the service
-     * @param configuration the configuration
-     */
-    void addServiceCallConfiguration(String serviceName, 
ServiceCallConfigurationDefinition configuration);
+public interface ModelCamelContext extends CamelContext, Model {
 
 }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
 
b/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
index 667fd88..afbc382 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
@@ -298,7 +298,7 @@ public final class RouteDefinitionHelper {
      * @param context the camel context
      * @param route   the route
      */
-    public static void prepareRoute(ModelCamelContext context, RouteDefinition 
route) {
+    public static void prepareRoute(CamelContext context, RouteDefinition 
route) {
         prepareRoute(context, route, null, null, null, null, null);
     }
 
@@ -315,7 +315,7 @@ public final class RouteDefinitionHelper {
      * @param interceptSendToEndpointDefinitions optional list of 
interceptSendToEndpoints
      * @param onCompletions                      optional list onCompletions
      */
-    public static void prepareRoute(ModelCamelContext context, RouteDefinition 
route,
+    public static void prepareRoute(CamelContext context, RouteDefinition 
route,
                                     List<OnExceptionDefinition> onExceptions,
                                     List<InterceptDefinition> intercepts,
                                     List<InterceptFromDefinition> 
interceptFromDefinitions,
@@ -344,7 +344,7 @@ public final class RouteDefinitionHelper {
      * @param interceptSendToEndpointDefinitions optional list of 
interceptSendToEndpoints
      * @param onCompletions                      optional list onCompletions
      */
-    private static void prepareRouteImp(ModelCamelContext context, 
RouteDefinition route,
+    private static void prepareRouteImp(CamelContext context, RouteDefinition 
route,
                                     List<OnExceptionDefinition> onExceptions,
                                     List<InterceptDefinition> intercepts,
                                     List<InterceptFromDefinition> 
interceptFromDefinitions,
@@ -441,7 +441,7 @@ public final class RouteDefinitionHelper {
         }
     }
 
-    private static void initParentAndErrorHandlerBuilder(ModelCamelContext 
context, RouteDefinition route,
+    private static void initParentAndErrorHandlerBuilder(CamelContext context, 
RouteDefinition route,
                                                          
List<ProcessorDefinition<?>> abstracts, List<OnExceptionDefinition> 
onExceptions) {
 
         if (context != null) {
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java 
b/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
index d957d27..264cc20 100644
--- a/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++ b/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -202,7 +202,7 @@ public class RouteReifier extends 
ProcessorReifier<RouteDefinition> {
         if (camelContext instanceof StatefulService) {
             StatefulService service = (StatefulService) camelContext;
             if (service.isStarted()) {
-                
camelContext.adapt(ModelCamelContext.class).addRouteDefinition(merged);
+                camelContext.addRouteDefinition(merged);
             }
         }
         return merged;
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
 
b/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
index b950f5d..635f7f5 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
@@ -22,7 +22,7 @@ import java.util.function.Function;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.ProcessorDefinitionHelper;
 import org.apache.camel.model.dataformat.ASN1DataFormat;
 import org.apache.camel.model.dataformat.AvroDataFormat;
@@ -142,7 +142,7 @@ public abstract class DataFormatReifier<T extends 
DataFormatDefinition> {
             }
 
             // try to let resolver see if it can resolve it, its not always 
possible
-            type = 
camelContext.adapt(ModelCamelContext.class).resolveDataFormatDefinition(ref);
+            type = 
camelContext.getExtension(Model.class).resolveDataFormatDefinition(ref);
 
             if (type == null) {
                 dataFormat = camelContext.resolveDataFormat(ref);
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/component/log/LogListenerTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/component/log/LogListenerTest.java
index c335dfa..17d2c24 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/component/log/LogListenerTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/component/log/LogListenerTest.java
@@ -21,7 +21,6 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.JndiRegistry;
-import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.support.jndi.JndiTest;
 import org.junit.Assert;
 import org.junit.Test;
@@ -50,7 +49,7 @@ public class LogListenerTest {
     protected CamelContext createCamelContext() throws Exception {
         JndiRegistry registry = new 
JndiRegistry(JndiTest.createInitialContext());
         CamelContext context = new DefaultCamelContext(registry);
-        context.adapt(ModelCamelContext.class).addRoutes(createRouteBuilder());
+        context.addRoutes(createRouteBuilder());
         return context;
     }
 
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/impl/StartAndStopRoutesTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/impl/StartAndStopRoutesTest.java
index 9cea898..750f61d 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/impl/StartAndStopRoutesTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/impl/StartAndStopRoutesTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.FromDefinition;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.RouteDefinition;
 import org.junit.Test;
 
@@ -60,7 +60,7 @@ public class StartAndStopRoutesTest extends 
ContextTestSupport {
         // lets mutate the route...
         FromDefinition fromType = route.getInput();
         fromType.setUri("direct:test.C");
-        context.adapt(ModelCamelContext.class).addRouteDefinition(route);
+        context.getExtension(Model.class).addRouteDefinition(route);
 
         // now lets check it works
         // send from C over B to results
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/processor/LogEipListenerTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/processor/LogEipListenerTest.java
index b9b144a..a2c79db 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/processor/LogEipListenerTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/processor/LogEipListenerTest.java
@@ -21,7 +21,6 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.JndiRegistry;
-import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.support.jndi.JndiTest;
 import org.junit.Assert;
 import org.junit.Test;
@@ -50,7 +49,7 @@ public class LogEipListenerTest {
     protected CamelContext createCamelContext() throws Exception {
         JndiRegistry registry = new 
JndiRegistry(JndiTest.createInitialContext());
         CamelContext context = new DefaultCamelContext(registry);
-        context.adapt(ModelCamelContext.class).addRoutes(createRouteBuilder());
+        context.addRoutes(createRouteBuilder());
         return context;
     }
 
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AbstractDistributedTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AbstractDistributedTest.java
index 7dd5ee4..87edaa6 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AbstractDistributedTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AbstractDistributedTest.java
@@ -22,7 +22,6 @@ import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.support.service.ServiceHelper;
 import org.junit.After;
 import org.junit.Before;
@@ -43,7 +42,7 @@ public abstract class AbstractDistributedTest extends 
ContextTestSupport {
         ServiceHelper.startService(template2, context2);
 
         // add routes after CamelContext has been started
-        
context2.adapt(ModelCamelContext.class).addRoutes(createRouteBuilder2());
+        context2.addRoutes(createRouteBuilder2());
     }
 
     @After
diff --git 
a/core/camel-management-impl/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java
 
b/core/camel-management-impl/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java
index 1c38134..7d03bfc 100644
--- 
a/core/camel-management-impl/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java
+++ 
b/core/camel-management-impl/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java
@@ -28,7 +28,7 @@ import 
org.apache.camel.api.management.mbean.ManagedCamelContextMBean;
 import org.apache.camel.api.management.mbean.ManagedProcessorMBean;
 import org.apache.camel.api.management.mbean.ManagedRouteMBean;
 import org.apache.camel.api.management.mbean.ManagedStepMBean;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.spi.ManagementStrategy;
 
@@ -54,7 +54,7 @@ public class ManagedCamelContextImpl implements 
ManagedCamelContext {
         }
 
         Processor processor = camelContext.getProcessor(id);
-        ProcessorDefinition def = 
camelContext.adapt(ModelCamelContext.class).getProcessorDefinition(id);
+        ProcessorDefinition def = 
camelContext.getExtension(Model.class).getProcessorDefinition(id);
 
         // processor may be null if its anonymous inner class or as lambda
         if (def != null) {
@@ -77,7 +77,7 @@ public class ManagedCamelContextImpl implements 
ManagedCamelContext {
         }
 
         Processor processor = camelContext.getProcessor(id);
-        ProcessorDefinition def = 
camelContext.adapt(ModelCamelContext.class).getProcessorDefinition(id);
+        ProcessorDefinition def = 
camelContext.getExtension(Model.class).getProcessorDefinition(id);
 
         // processor may be null if its anonymous inner class or as lambda
         if (def != null) {
diff --git 
a/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java
 
b/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java
index 3650601..d683c73 100644
--- 
a/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java
+++ 
b/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java
@@ -19,7 +19,7 @@ package org.apache.camel.management.mbean;
 import java.util.Iterator;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ProcessorDefinitionHelper;
 import org.apache.camel.model.RouteDefinition;
@@ -43,7 +43,7 @@ public final class ModelCamelContextHelper {
      * @return <tt>true</tt> if in use, <tt>false</tt> if not
      */
     public static boolean isEipInUse(CamelContext camelContext, String name) {
-        for (RouteDefinition route : 
camelContext.adapt(ModelCamelContext.class).getRouteDefinitions()) {
+        for (RouteDefinition route : 
camelContext.getExtension(Model.class).getRouteDefinitions()) {
             if (name.equals(route.getInput().getShortName())) {
                 return true;
             }
diff --git 
a/core/camel-management-impl/src/test/java/org/apache/camel/management/RemoveRouteDefinitionTest.java
 
b/core/camel-management-impl/src/test/java/org/apache/camel/management/RemoveRouteDefinitionTest.java
index baa0fbd..3667f23 100644
--- 
a/core/camel-management-impl/src/test/java/org/apache/camel/management/RemoveRouteDefinitionTest.java
+++ 
b/core/camel-management-impl/src/test/java/org/apache/camel/management/RemoveRouteDefinitionTest.java
@@ -24,7 +24,6 @@ import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.RouteDefinition;
 import org.junit.Test;
 
@@ -47,11 +46,8 @@ public class RemoveRouteDefinitionTest extends 
ManagementTestSupport {
         boolean registered = mbeanServer.isRegistered(on);
         assertTrue("Should be registered", registered);
         
-        RouteDefinition definition = context.getRouteDefinition("route1");
-        List<RouteDefinition> routeDefinitions = new ArrayList<>();
-        routeDefinitions.add(definition);
         context.getRouteController().stopRoute("route1");
-        context.adapt(ModelCamelContext.class).removeRoute("route1");
+        context.removeRoute("route1");
 
         // route is shutdown (= also removed), so its not longer in JMX
         set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), null);
diff --git 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
index 99d0a81..d183e9b 100644
--- 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
+++ 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
@@ -39,7 +39,7 @@ import org.apache.camel.ServiceStatus;
 import org.apache.camel.StatefulService;
 import org.apache.camel.api.management.ManagedCamelContext;
 import org.apache.camel.api.management.mbean.ManagedRouteMBean;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.rest.RestDefinition;
@@ -375,7 +375,7 @@ public abstract class AbstractLocalCamelController extends 
AbstractCamelControll
         if (context == null) {
             return null;
         }
-        RouteDefinition route = 
context.adapt(ModelCamelContext.class).getRouteDefinition(routeId);
+        RouteDefinition route = 
context.getExtension(Model.class).getRouteDefinition(routeId);
         if (route == null) {
             return null;
         }
@@ -437,7 +437,7 @@ public abstract class AbstractLocalCamelController extends 
AbstractCamelControll
             return null;
         }
 
-        List<RestDefinition> rests = 
context.adapt(ModelCamelContext.class).getRestDefinitions();
+        List<RestDefinition> rests = 
context.getExtension(Model.class).getRestDefinitions();
         if (rests == null || rests.isEmpty()) {
             return null;
         }
diff --git 
a/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ContextListCommandTest.java
 
b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ContextListCommandTest.java
index a5c95a1..08a175c 100644
--- 
a/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ContextListCommandTest.java
+++ 
b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ContextListCommandTest.java
@@ -25,7 +25,6 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.engine.DefaultRuntimeEndpointRegistry;
 import org.apache.camel.impl.engine.ExplicitCamelContextNameStrategy;
-import org.apache.camel.model.ModelCamelContext;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -67,7 +66,7 @@ public class ContextListCommandTest {
         CamelContext context = new DefaultCamelContext();
         context.setRuntimeEndpointRegistry(new 
DefaultRuntimeEndpointRegistry());
         context.setNameStrategy(new 
ExplicitCamelContextNameStrategy("foobar"));
-        context.adapt(ModelCamelContext.class).addRoutes(new RouteBuilder() {
+        context.addRoutes(new RouteBuilder() {
             @Override
             public void configure() throws Exception {
                 from("direct:start").to("mock:result");
diff --git 
a/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ValidatorListCommandTest.java
 
b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ValidatorListCommandTest.java
index 02d8eac..7bafb93 100644
--- 
a/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ValidatorListCommandTest.java
+++ 
b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ValidatorListCommandTest.java
@@ -26,7 +26,7 @@ import org.apache.camel.ValidationException;
 import org.apache.camel.builder.ExpressionBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.engine.ExplicitCamelContextNameStrategy;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.model.validator.CustomValidatorDefinition;
 import org.apache.camel.model.validator.EndpointValidatorDefinition;
@@ -76,15 +76,15 @@ public class ValidatorListCommandTest {
         EndpointValidatorDefinition evd = new EndpointValidatorDefinition();
         evd.setType("xml:foo");
         evd.setUri("direct:validator");
-        context.adapt(ModelCamelContext.class).getValidators().add(evd);
+        context.getExtension(Model.class).getValidators().add(evd);
         PredicateValidatorDefinition pvd = new PredicateValidatorDefinition();
         pvd.setType(this.getClass());
         pvd.setExpression(new 
ExpressionDefinition(ExpressionBuilder.bodyExpression()));
-        context.adapt(ModelCamelContext.class).getValidators().add(pvd);
+        context.getExtension(Model.class).getValidators().add(pvd);
         CustomValidatorDefinition cvd = new CustomValidatorDefinition();
         cvd.setType("custom");
         cvd.setClassName(MyValidator.class.getName());
-        context.adapt(ModelCamelContext.class).getValidators().add(cvd);
+        context.getExtension(Model.class).getValidators().add(cvd);
         context.setNameStrategy(new 
ExplicitCamelContextNameStrategy("foobar"));
         context.start();
 
diff --git 
a/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigurationTest.java
 
b/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigurationTest.java
index 087acd6..b7171e3 100644
--- 
a/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigurationTest.java
+++ 
b/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigurationTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.component.hystrix.processor;
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.apache.camel.model.HystrixDefinition;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.RouteDefinition;
 import org.junit.Assert;
 import org.junit.Test;
@@ -51,7 +51,7 @@ public class HystrixHierarchicalConfigurationTest {
 
     @Test
     public void testConfiguration() throws Exception {
-        RouteDefinition routeDefinition = 
camelContext.adapt(ModelCamelContext.class).getRouteDefinition("hystrix-route");
+        RouteDefinition routeDefinition = 
camelContext.getExtension(Model.class).getRouteDefinition("hystrix-route");
         HystrixDefinition hystrixDefinition = 
findHystrixDefinition(routeDefinition);
 
         Assert.assertNotNull(hystrixDefinition);
diff --git 
a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java
 
b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java
index 3089ba1..54f9871 100644
--- 
a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java
+++ 
b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java
@@ -22,7 +22,7 @@ import java.io.InputStream;
 import org.apache.camel.CamelContext;
 import org.apache.camel.blueprint.BlueprintCamelContext;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.test.karaf.AbstractFeatureTest;
@@ -58,7 +58,7 @@ public class DuplicateNamespacePrefixIssueTest extends 
AbstractFeatureTest {
         });
 
         // Dump the model XML
-        String originalModelXML = ModelHelper.dumpModelAsXml(context, 
context.adapt(ModelCamelContext.class).getRouteDefinition("foo"));
+        String originalModelXML = ModelHelper.dumpModelAsXml(context, 
context.getExtension(Model.class).getRouteDefinition("foo"));
 
         // Reload routes from dumped XML
         InputStream stream = new 
ByteArrayInputStream(originalModelXML.getBytes("UTF-8"));

Reply via email to