You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/05/20 11:28:53 UTC

[camel] 01/03: CAMEL-13456: CamelContext - Move API that are not related to end users to an ExtendedCamelContext

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

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

commit d99ecec8a3d7c4f2d24eec40533367cbb7647a52
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon May 20 12:53:22 2019 +0200

    CAMEL-13456: CamelContext - Move API that are not related to end users to an ExtendedCamelContext
---
 .../main/java/org/apache/camel/CamelContext.java   | 122 +----------------
 .../org/apache/camel/ExtendedCamelContext.java     | 146 +++++++++++++++++++++
 .../camel/impl/engine/AbstractCamelContext.java    |   3 +-
 .../apache/camel/impl/engine/DefaultInjector.java  |   3 +-
 .../impl/engine/SubscribeMethodProcessor.java      |   4 +-
 .../impl/cloud/DefaultServiceCallProcessor.java    |   3 +-
 .../core/xml/AbstractCamelContextFactoryBean.java  |  13 +-
 .../camel/builder/ErrorHandlerBuilderRef.java      |   3 +-
 .../org/apache/camel/builder/ProxyBuilder.java     |   3 +-
 .../org/apache/camel/builder/RouteBuilder.java     |   5 +-
 .../camel/impl/CamelPostProcessorHelper.java       |   5 +-
 .../camel/impl/DefaultExecutorServiceManager.java  |   5 +-
 .../java/org/apache/camel/impl/DefaultModel.java   |   3 +-
 .../org/apache/camel/impl/DefaultRouteContext.java |   5 +-
 .../apache/camel/impl/ReloadStrategySupport.java   |   3 +-
 .../java/org/apache/camel/impl/RouteService.java   |   3 +-
 .../java/org/apache/camel/main/MainSupport.java    |   5 +-
 .../java/org/apache/camel/model/ModelHelper.java   |   3 +-
 .../model/RestContextRefDefinitionHelper.java      |   3 +-
 .../model/RouteContextRefDefinitionHelper.java     |   3 +-
 .../apache/camel/model/RouteDefinitionHelper.java  |   9 +-
 .../apache/camel/model/rest/RestDefinition.java    |   3 +-
 .../java/org/apache/camel/reifier/BeanReifier.java |   3 +-
 .../org/apache/camel/reifier/ProcessorReifier.java |  20 +--
 .../org/apache/camel/reifier/RouteReifier.java     |   5 +-
 .../java/org/apache/camel/reifier/StepReifier.java |   3 +-
 .../camel/builder/ContextErrorHandlerTest.java     |   3 +-
 .../camel/builder/ErrorHandlerBuilderRefTest.java  |   3 +-
 .../camel/impl/BeanInjectRouteBuilderTest.java     |   3 +-
 .../CamelContextAddRestDefinitionsFromXmlTest.java |   3 +-
 ...CamelContextAddRouteDefinitionsFromXmlTest.java |   3 +-
 .../CamelProduceInterfaceEventNotifierTest.java    |   3 +-
 .../org/apache/camel/impl/CustomIdFactoryTest.java |   5 +-
 .../impl/DefaultCamelBeanPostProcessorTest.java    |   3 +-
 .../camel/impl/model/RouteIdFactoryTest.java       |   3 +-
 ...ScopedOnExceptionMultipleRouteBuildersTest.java |   3 +-
 .../issues/OnExceptionContinuedIssueTest.java      |   3 +-
 ...ScopedOnExceptionMultipleRouteBuildersTest.java |   3 +-
 .../processor/CustomProcessorFactoryTest.java      |   3 +-
 .../camel/management/DefaultManagementAgent.java   |   3 +-
 .../camel/management/mbean/ManagedProcessor.java   |   5 +-
 41 files changed, 254 insertions(+), 181 deletions(-)

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 5712d40..34d6caf 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
@@ -20,21 +20,15 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 
-import org.apache.camel.spi.AnnotationBasedProcessorFactory;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
-import org.apache.camel.spi.BeanProcessorFactory;
-import org.apache.camel.spi.BeanProxyFactory;
-import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.CamelContextNameStrategy;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatResolver;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.Debugger;
-import org.apache.camel.spi.DeferServiceFactory;
 import org.apache.camel.spi.EndpointRegistry;
 import org.apache.camel.spi.EndpointStrategy;
 import org.apache.camel.spi.ExecutorServiceManager;
@@ -47,14 +41,10 @@ import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.LogListener;
-import org.apache.camel.spi.ManagementMBeanAssembler;
 import org.apache.camel.spi.ManagementNameStrategy;
 import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.spi.MessageHistoryFactory;
-import org.apache.camel.spi.ModelJAXBContextFactory;
-import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.PackageScanClassResolver;
-import org.apache.camel.spi.ProcessorFactory;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.ReloadStrategy;
@@ -97,6 +87,8 @@ import org.apache.camel.support.jsse.SSLContextParameters;
  * <p/>
  * 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.
+ * <p/>
+ * For more advanced APIs with {@link CamelContext} see {@link ExtendedCamelContext}.
  */
 public interface CamelContext extends StatefulService, RuntimeConfiguration {
 
@@ -655,14 +647,6 @@ public interface CamelContext extends StatefulService, RuntimeConfiguration {
     boolean removeRoute(String routeId) throws Exception;
 
     /**
-     * Method to signal to {@link CamelContext} that the process to initialize setup routes is in progress.
-     *
-     * @param done <tt>false</tt> to start the process, call again with <tt>true</tt> to signal its done.
-     * @see #isSetupRoutes()
-     */
-    void setupRoutes(boolean done);
-
-    /**
      * Indicates whether current thread is setting up route(s) as part of starting Camel from spring/blueprint.
      * <p/>
      * This can be useful to know by {@link LifecycleStrategy} or the likes, in case
@@ -725,20 +709,6 @@ public interface CamelContext extends StatefulService, RuntimeConfiguration {
     Injector getInjector();
 
     /**
-     * Returns the bean post processor used to do any bean customization.
-     *
-     * @return the bean post processor.
-     */
-    CamelBeanPostProcessor getBeanPostProcessor();
-
-    /**
-     * Returns the management mbean assembler
-     *
-     * @return the mbean assembler
-     */
-    ManagementMBeanAssembler getManagementMBeanAssembler();
-
-    /**
      * Returns the lifecycle strategies used to handle lifecycle notifications
      *
      * @return the lifecycle strategies
@@ -912,16 +882,6 @@ public interface CamelContext extends StatefulService, RuntimeConfiguration {
     ConsumerTemplate createConsumerTemplate(int maximumCacheSize);
 
     /**
-     * Creates a new multicast processor which sends an exchange to all the processors.
-     *
-     * @param processors the list of processors to send to
-     * @param executor the executor to use
-     * @return a multicasting processor
-     */
-    AsyncProcessor createMulticast(Collection<Processor> processors,
-                                   ExecutorService executor, boolean shutdownExecutorService);
-
-    /**
      * Adds the given interceptor strategy
      *
      * @param interceptStrategy the strategy
@@ -936,20 +896,6 @@ public interface CamelContext extends StatefulService, RuntimeConfiguration {
     List<InterceptStrategy> getInterceptStrategies();
 
     /**
-     * Gets the default error handler builder which is inherited by the routes
-     *
-     * @return the builder
-     */
-    ErrorHandlerFactory getErrorHandlerFactory();
-
-    /**
-     * Sets the default error handler builder which is inherited by the routes
-     *
-     * @param errorHandlerFactory the builder
-     */
-    void setErrorHandlerFactory(ErrorHandlerFactory errorHandlerFactory);
-
-    /**
      * Gets the default shared thread pool for error handlers which
      * leverages this for asynchronous redelivery tasks.
      */
@@ -1110,20 +1056,6 @@ public interface CamelContext extends StatefulService, RuntimeConfiguration {
     void setPackageScanClassResolver(PackageScanClassResolver resolver);
 
     /**
-     * Uses a custom node id factory when generating auto assigned ids to the nodes in the route definitions
-     *
-     * @param factory custom factory to use
-     */
-    void setNodeIdFactory(NodeIdFactory factory);
-
-    /**
-     * Gets the node id factory
-     *
-     * @return the node id factory
-     */
-    NodeIdFactory getNodeIdFactory();
-
-    /**
      * Gets the management strategy
      *
      * @return the management strategy
@@ -1175,7 +1107,7 @@ public interface CamelContext extends StatefulService, RuntimeConfiguration {
     AsyncProcessorAwaitManager getAsyncProcessorAwaitManager();
 
     /**
-     * Sets a custom  {@link org.apache.camel.AsyncProcessor} await manager.
+     * Sets a custom {@link org.apache.camel.AsyncProcessor} await manager.
      *
      * @param manager the manager
      */
@@ -1224,20 +1156,6 @@ public interface CamelContext extends StatefulService, RuntimeConfiguration {
     void setExecutorServiceManager(ExecutorServiceManager executorServiceManager);
 
     /**
-     * Gets the current {@link org.apache.camel.spi.ProcessorFactory}
-     *
-     * @return the factory, can be <tt>null</tt> if no custom factory has been set
-     */
-    ProcessorFactory getProcessorFactory();
-
-    /**
-     * Sets a custom {@link org.apache.camel.spi.ProcessorFactory}
-     *
-     * @param processorFactory the custom factory
-     */
-    void setProcessorFactory(ProcessorFactory processorFactory);
-
-    /**
      * Gets the current {@link org.apache.camel.spi.MessageHistoryFactory}
      *
      * @return the factory
@@ -1426,20 +1344,6 @@ public interface CamelContext extends StatefulService, RuntimeConfiguration {
     List<RoutePolicyFactory> getRoutePolicyFactories();
 
     /**
-     * Returns the JAXB Context factory used to create Models.
-     *
-     * @return the JAXB Context factory used to create Models.
-     */
-    ModelJAXBContextFactory getModelJAXBContextFactory();
-
-    /**
-     * Sets a custom JAXB Context factory to be used
-     *
-     * @param modelJAXBContextFactory a JAXB Context factory
-     */
-    void setModelJAXBContextFactory(ModelJAXBContextFactory modelJAXBContextFactory);
-
-    /**
      * Returns the {@link ReloadStrategy} if in use.
      *
      * @return the strategy, or <tt>null</tt> if none has been configured.
@@ -1481,24 +1385,4 @@ public interface CamelContext extends StatefulService, RuntimeConfiguration {
      */
     void setHeadersMapFactory(HeadersMapFactory factory);
 
-    /**
-     * Gets the {@link DeferServiceFactory} to use.
-     */
-    DeferServiceFactory getDeferServiceFactory();
-
-    /**
-     * Gets the {@link AnnotationBasedProcessorFactory} to use.
-     */
-    AnnotationBasedProcessorFactory getAnnotationBasedProcessorFactory();
-
-    /**
-     * Gets the {@link BeanProxyFactory} to use.
-     */
-    BeanProxyFactory getBeanProxyFactory();
-
-    /**
-     * Gets the {@link BeanProcessorFactory} to use.
-     */
-    BeanProcessorFactory getBeanProcessorFactory();
-
 }
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
new file mode 100644
index 0000000..352d5c7
--- /dev/null
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel;
+
+import java.util.Collection;
+import java.util.concurrent.ExecutorService;
+
+import org.apache.camel.spi.AnnotationBasedProcessorFactory;
+import org.apache.camel.spi.BeanProcessorFactory;
+import org.apache.camel.spi.BeanProxyFactory;
+import org.apache.camel.spi.CamelBeanPostProcessor;
+import org.apache.camel.spi.DeferServiceFactory;
+import org.apache.camel.spi.ManagementMBeanAssembler;
+import org.apache.camel.spi.ModelJAXBContextFactory;
+import org.apache.camel.spi.NodeIdFactory;
+import org.apache.camel.spi.ProcessorFactory;
+
+/**
+ * Extended {@link CamelContext} which contains the methods and APIs that are not primary intended for Camel end users
+ * but for SPI, custom components, or more advanced used-cases with Camel.
+ */
+public interface ExtendedCamelContext extends CamelContext {
+
+    /**
+     * Method to signal to {@link CamelContext} that the process to initialize setup routes is in progress.
+     *
+     * @param done <tt>false</tt> to start the process, call again with <tt>true</tt> to signal its done.
+     * @see #isSetupRoutes()
+     */
+    void setupRoutes(boolean done);
+
+    /**
+     * Returns the bean post processor used to do any bean customization.
+     *
+     * @return the bean post processor.
+     */
+    CamelBeanPostProcessor getBeanPostProcessor();
+
+    /**
+     * Returns the management mbean assembler
+     *
+     * @return the mbean assembler
+     */
+    ManagementMBeanAssembler getManagementMBeanAssembler();
+
+    /**
+     * Creates a new multicast processor which sends an exchange to all the processors.
+     *
+     * @param processors the list of processors to send to
+     * @param executor the executor to use
+     * @return a multicasting processor
+     */
+    AsyncProcessor createMulticast(Collection<Processor> processors,
+                                   ExecutorService executor, boolean shutdownExecutorService);
+
+    /**
+     * Gets the default error handler builder which is inherited by the routes
+     *
+     * @return the builder
+     */
+    ErrorHandlerFactory getErrorHandlerFactory();
+
+    /**
+     * Sets the default error handler builder which is inherited by the routes
+     *
+     * @param errorHandlerFactory the builder
+     */
+    void setErrorHandlerFactory(ErrorHandlerFactory errorHandlerFactory);
+
+    /**
+     * Uses a custom node id factory when generating auto assigned ids to the nodes in the route definitions
+     *
+     * @param factory custom factory to use
+     */
+    void setNodeIdFactory(NodeIdFactory factory);
+
+    /**
+     * Gets the node id factory
+     *
+     * @return the node id factory
+     */
+    NodeIdFactory getNodeIdFactory();
+
+    /**
+     * Gets the current {@link org.apache.camel.spi.ProcessorFactory}
+     *
+     * @return the factory, can be <tt>null</tt> if no custom factory has been set
+     */
+    ProcessorFactory getProcessorFactory();
+
+    /**
+     * Sets a custom {@link org.apache.camel.spi.ProcessorFactory}
+     *
+     * @param processorFactory the custom factory
+     */
+    void setProcessorFactory(ProcessorFactory processorFactory);
+
+    /**
+     * Returns the JAXB Context factory used to create Models.
+     *
+     * @return the JAXB Context factory used to create Models.
+     */
+    ModelJAXBContextFactory getModelJAXBContextFactory();
+
+    /**
+     * Sets a custom JAXB Context factory to be used
+     *
+     * @param modelJAXBContextFactory a JAXB Context factory
+     */
+    void setModelJAXBContextFactory(ModelJAXBContextFactory modelJAXBContextFactory);
+
+    /**
+     * Gets the {@link DeferServiceFactory} to use.
+     */
+    DeferServiceFactory getDeferServiceFactory();
+
+    /**
+     * Gets the {@link AnnotationBasedProcessorFactory} to use.
+     */
+    AnnotationBasedProcessorFactory getAnnotationBasedProcessorFactory();
+
+    /**
+     * Gets the {@link BeanProxyFactory} to use.
+     */
+    BeanProxyFactory getBeanProxyFactory();
+
+    /**
+     * Gets the {@link BeanProcessorFactory} to use.
+     */
+    BeanProcessorFactory getBeanProcessorFactory();
+
+}
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 83a5c28..f44e3a7 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
@@ -50,6 +50,7 @@ import org.apache.camel.Consumer;
 import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.Endpoint;
 import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.ExtendedStartupListener;
 import org.apache.camel.FailedToStartRouteException;
 import org.apache.camel.FluentProducerTemplate;
@@ -161,7 +162,7 @@ import static org.apache.camel.spi.UnitOfWork.MDC_CAMEL_CONTEXT_ID;
 /**
  * Represents the context used to configure routes and the policies to use.
  */
-public abstract class AbstractCamelContext extends ServiceSupport implements CamelContext, Suspendable {
+public abstract class AbstractCamelContext extends ServiceSupport implements ExtendedCamelContext, Suspendable {
 
     public enum Initialization {
         Eager, Default, Lazy
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInjector.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInjector.java
index c85a956..76f583b 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInjector.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInjector.java
@@ -17,6 +17,7 @@
 package org.apache.camel.impl.engine;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.Injector;
@@ -35,7 +36,7 @@ public class DefaultInjector implements Injector  {
     private final CamelBeanPostProcessor postProcessor;
 
     public DefaultInjector(CamelContext context) {
-        postProcessor = context.getBeanPostProcessor();
+        postProcessor = context.adapt(ExtendedCamelContext.class).getBeanPostProcessor();
     }
 
     @Override
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/SubscribeMethodProcessor.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SubscribeMethodProcessor.java
index 683efd3..b010417 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/SubscribeMethodProcessor.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SubscribeMethodProcessor.java
@@ -26,6 +26,7 @@ import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Navigate;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
@@ -53,7 +54,8 @@ public final class SubscribeMethodProcessor extends AsyncProcessorSupport implem
     }
 
     public void addMethod(final Object pojo, final Method method, final Endpoint endpoint, String predicate) throws Exception {
-        Processor answer = endpoint.getCamelContext().getBeanProcessorFactory().createBeanProcessor(endpoint.getCamelContext(), pojo, method);
+        Processor answer = endpoint.getCamelContext().adapt(ExtendedCamelContext.class)
+                .getBeanProcessorFactory().createBeanProcessor(endpoint.getCamelContext(), pojo, method);
         // must ensure the consumer is being executed in an unit of work so synchronization callbacks etc is invoked
         CamelInternalProcessor internal = new CamelInternalProcessor(answer);
         internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(null));
diff --git a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
index 5603f19..6d438e3 100644
--- a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
+++ b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
@@ -25,6 +25,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.cloud.ServiceCallConstants;
@@ -130,7 +131,7 @@ public class DefaultServiceCallProcessor extends AsyncProcessorSupport {
         args.put("expression", expression);
         args.put("exchangePattern", exchangePattern);
 
-        Processor send = camelContext.getProcessorFactory().createProcessor(camelContext, "SendDynamicProcessor", args);
+        Processor send = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(camelContext, "SendDynamicProcessor", args);
         processor = AsyncProcessorConverterHelper.convert(send);
 
         // Start services if needed
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index 94f2de6..d64cc5b 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -30,6 +30,7 @@ import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelException;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.RoutesBuilder;
@@ -411,7 +412,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
             LOG.debug("Setting up routes");
 
             // mark that we are setting up routes
-            getContext().setupRoutes(false);
+            getContext().adapt(ExtendedCamelContext.class).setupRoutes(false);
 
             // must init route refs before we prepare the routes below
             initRouteRefs();
@@ -462,7 +463,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
             installRoutes();
 
             // and we are now finished setting up the routes
-            getContext().setupRoutes(true);
+            getContext().adapt(ExtendedCamelContext.class).setupRoutes(true);
         }
     }
 
@@ -867,7 +868,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
             context.setHandleFault(CamelContextHelper.parseBoolean(context, getHandleFault()));
         }
         if (getErrorHandlerRef() != null) {
-            context.setErrorHandlerFactory(new ErrorHandlerBuilderRef(getErrorHandlerRef()));
+            context.adapt(ExtendedCamelContext.class).setErrorHandlerFactory(new ErrorHandlerBuilderRef(getErrorHandlerRef()));
         }
         if (getAutoStartup() != null) {
             context.setAutoStartup(CamelContextHelper.parseBoolean(context, getAutoStartup()));
@@ -1113,7 +1114,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
         ModelJAXBContextFactory modelJAXBContextFactory = getBeanForType(ModelJAXBContextFactory.class);
         if (modelJAXBContextFactory != null) {
             LOG.info("Using custom ModelJAXBContextFactory: {}", modelJAXBContextFactory);
-            getContext().setModelJAXBContextFactory(modelJAXBContextFactory);
+            getContext().adapt(ExtendedCamelContext.class).setModelJAXBContextFactory(modelJAXBContextFactory);
         }
         ClassResolver classResolver = getBeanForType(ClassResolver.class);
         if (classResolver != null) {
@@ -1138,7 +1139,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
         ProcessorFactory processorFactory = getBeanForType(ProcessorFactory.class);
         if (processorFactory != null) {
             LOG.info("Using custom ProcessorFactory: {}", processorFactory);
-            getContext().setProcessorFactory(processorFactory);
+            getContext().adapt(ExtendedCamelContext.class).setProcessorFactory(processorFactory);
         }
         Debugger debugger = getBeanForType(Debugger.class);
         if (debugger != null) {
@@ -1153,7 +1154,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
         NodeIdFactory nodeIdFactory = getBeanForType(NodeIdFactory.class);
         if (nodeIdFactory != null) {
             LOG.info("Using custom NodeIdFactory: {}", nodeIdFactory);
-            getContext().setNodeIdFactory(nodeIdFactory);
+            getContext().adapt(ExtendedCamelContext.class).setNodeIdFactory(nodeIdFactory);
         }
         StreamCachingStrategy streamCachingStrategy = getBeanForType(StreamCachingStrategy.class);
         if (streamCachingStrategy != null) {
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java b/core/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
index d7aa51f..8cfcec2 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
@@ -22,6 +22,7 @@ import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.model.OnExceptionDefinition;
 import org.apache.camel.model.RouteDefinition;
@@ -157,7 +158,7 @@ public class ErrorHandlerBuilderRef extends ErrorHandlerBuilderSupport {
     }
 
     protected static ErrorHandlerFactory lookupErrorHandlerBuilder(CamelContext camelContext) {
-        ErrorHandlerFactory answer = camelContext.getErrorHandlerFactory();
+        ErrorHandlerFactory answer = camelContext.adapt(ExtendedCamelContext.class).getErrorHandlerFactory();
         if (answer instanceof ErrorHandlerBuilderRef) {
             ErrorHandlerBuilderRef other = (ErrorHandlerBuilderRef) answer;
             String otherRef = other.getRef();
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ProxyBuilder.java b/core/camel-core/src/main/java/org/apache/camel/builder/ProxyBuilder.java
index 263135a..4c861d8 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/ProxyBuilder.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/ProxyBuilder.java
@@ -18,6 +18,7 @@ package org.apache.camel.builder;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.BeanProxyFactory;
 import org.apache.camel.util.ObjectHelper;
 
@@ -81,7 +82,7 @@ public final class ProxyBuilder {
     public <T> T build(Class<T>... interfaceClasses) throws Exception {
         ObjectHelper.notNull(endpoint, "endpoint");
         // use proxy service
-        BeanProxyFactory factory = camelContext.getBeanProxyFactory();
+        BeanProxyFactory factory = camelContext.adapt(ExtendedCamelContext.class).getBeanProxyFactory();
         if (factory == null) {
             throw new IllegalArgumentException("Cannot find BeanProxyFactory. Make sure camel-bean is on the classpath.");
         }
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java b/core/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
index 668e2c2..fade2e4 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
@@ -24,6 +24,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Route;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.model.FromDefinition;
@@ -427,8 +428,8 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
         if (initialized.compareAndSet(false, true)) {
             // Set the CamelContext ErrorHandler here
             CamelContext camelContext = getContext();
-            if (camelContext.getErrorHandlerFactory() instanceof ErrorHandlerBuilder) {
-                setErrorHandlerBuilder((ErrorHandlerBuilder) camelContext.getErrorHandlerFactory());
+            if (camelContext.adapt(ExtendedCamelContext.class).getErrorHandlerFactory() instanceof ErrorHandlerBuilder) {
+                setErrorHandlerBuilder((ErrorHandlerBuilder) camelContext.adapt(ExtendedCamelContext.class).getErrorHandlerFactory());
             }
             configure();
             // mark all route definitions as custom prepared because
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/CamelPostProcessorHelper.java b/core/camel-core/src/main/java/org/apache/camel/impl/CamelPostProcessorHelper.java
index 8432d25..569b924 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/CamelPostProcessorHelper.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/CamelPostProcessorHelper.java
@@ -26,6 +26,7 @@ import org.apache.camel.Consumer;
 import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.DelegateEndpoint;
 import org.apache.camel.Endpoint;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.FluentProducerTemplate;
 import org.apache.camel.IsSingleton;
 import org.apache.camel.MultipleConsumersSupport;
@@ -251,7 +252,7 @@ public class CamelPostProcessorHelper implements CamelContextAware {
                     // lets create a proxy
                     try {
                         // use proxy service
-                        BeanProxyFactory factory = endpoint.getCamelContext().getBeanProxyFactory();
+                        BeanProxyFactory factory = endpoint.getCamelContext().adapt(ExtendedCamelContext.class).getBeanProxyFactory();
                         if (factory == null) {
                             throw new IllegalArgumentException("Cannot find BeanProxyFactory. Make sure camel-bean is on the classpath.");
                         }
@@ -400,7 +401,7 @@ public class CamelPostProcessorHelper implements CamelContextAware {
      */
     protected Producer createInjectionProducer(Endpoint endpoint, Object bean, String beanName) {
         try {
-            return endpoint.getCamelContext().getDeferServiceFactory().createProducer(endpoint);
+            return endpoint.getCamelContext().adapt(ExtendedCamelContext.class).getDeferServiceFactory().createProducer(endpoint);
         } catch (Exception e) {
             throw RuntimeCamelException.wrapRuntimeCamelException(e);
         }
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java
index d0b4534..532fd68 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java
@@ -30,6 +30,7 @@ import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.StaticService;
 import org.apache.camel.model.OptionalIdentifiedDefinition;
@@ -500,7 +501,7 @@ public class DefaultExecutorServiceManager extends ServiceSupport implements Exe
 
         // extract id from source
         if (source instanceof NamedNode) {
-            id = ((OptionalIdentifiedDefinition<?>) source).idOrCreate(this.camelContext.getNodeIdFactory());
+            id = ((OptionalIdentifiedDefinition<?>) source).idOrCreate(this.camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
             // and let source be the short name of the pattern
             sourceId = ((NamedNode) source).getShortName();
         } else if (source instanceof String) {
@@ -525,7 +526,7 @@ public class DefaultExecutorServiceManager extends ServiceSupport implements Exe
         if (source instanceof ProcessorDefinition) {
             RouteDefinition route = ProcessorDefinitionHelper.getRoute((ProcessorDefinition<?>) source);
             if (route != null) {
-                routeId = route.idOrCreate(this.camelContext.getNodeIdFactory());
+                routeId = route.idOrCreate(this.camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
             }
         }
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
index 56b4f86..a639d38 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.FailedToStartRouteException;
 import org.apache.camel.Route;
 import org.apache.camel.impl.engine.AbstractCamelContext;
@@ -108,7 +109,7 @@ public class DefaultModel implements Model {
 
     public synchronized RouteDefinition getRouteDefinition(String id) {
         for (RouteDefinition route : routeDefinitions) {
-            if (route.idOrCreate(camelContext.getNodeIdFactory()).equals(id)) {
+            if (route.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory()).equals(id)) {
                 return route;
             }
         }
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
index 2c9663d..061adbe 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
@@ -25,6 +25,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.Processor;
@@ -83,7 +84,7 @@ public class DefaultRouteContext implements RouteContext {
         this.camelContext = camelContext;
         this.route = route;
         this.from = from;
-        this.routeId = route.idOrCreate(camelContext.getNodeIdFactory());
+        this.routeId = route.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
     }
 
     public Endpoint getEndpoint() {
@@ -168,7 +169,7 @@ public class DefaultRouteContext implements RouteContext {
             Processor target = Pipeline.newInstance(getCamelContext(), eventDrivenProcessors);
 
             // force creating the route id so its known ahead of the route is started
-            String routeId = route.idOrCreate(getCamelContext().getNodeIdFactory());
+            String routeId = route.idOrCreate(getCamelContext().adapt(ExtendedCamelContext.class).getNodeIdFactory());
 
             // and wrap it in a unit of work so the UoW is on the top, so the entire route will be in the same UoW
             CamelInternalProcessor internal = new CamelInternalProcessor(target);
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 81cf3f8..3e0ade7 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
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.camel.ExtendedCamelContext;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -139,7 +140,7 @@ public abstract class ReloadStrategySupport extends ServiceSupport implements Re
                 // collect route ids and force assign ids if not in use
                 for (RouteDefinition route : routes) {
                     unassignedRouteIds |= !route.hasCustomIdAssigned();
-                    String id = route.idOrCreate(camelContext.getNodeIdFactory());
+                    String id = route.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
                     csb.append(id);
                 }
                 log.debug("Reloading routes: [{}] from XML resource: {}", csb, name);
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java b/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
index b4e02e6..9cde665 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
@@ -19,6 +19,7 @@ package org.apache.camel.impl;
 import java.util.List;
 
 import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
@@ -76,7 +77,7 @@ public class RouteService extends BaseRouteService {
         // the XML DSL will configure error handlers using refs, so we need this additional test
         if (routeDefinition.getErrorHandlerRef() != null) {
             ErrorHandlerFactory routeScoped = getRouteContext().getErrorHandlerFactory();
-            ErrorHandlerFactory contextScoped = getCamelContext().getErrorHandlerFactory();
+            ErrorHandlerFactory contextScoped = getCamelContext().adapt(ExtendedCamelContext.class).getErrorHandlerFactory();
             return routeScoped != null && contextScoped != null && routeScoped == contextScoped;
         }
 
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 b4152b3..c526a5f 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
@@ -41,6 +41,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.TypeConverters;
 import org.apache.camel.builder.RouteBuilder;
@@ -726,7 +727,7 @@ public abstract class MainSupport extends ServiceSupport {
     protected void loadRouteBuilders(CamelContext camelContext) throws Exception {
         // lets use Camel's bean post processor on any existing route builder classes
         // so the instance has some support for dependency injection
-        CamelBeanPostProcessor postProcessor = camelContext.getBeanPostProcessor();
+        CamelBeanPostProcessor postProcessor = camelContext.adapt(ExtendedCamelContext.class).getBeanPostProcessor();
         for (RouteBuilder routeBuilder : getRouteBuilders()) {
             postProcessor.postProcessBeforeInitialization(routeBuilder, routeBuilder.getClass().getName());
             postProcessor.postProcessAfterInitialization(routeBuilder, routeBuilder.getClass().getName());
@@ -750,7 +751,7 @@ public abstract class MainSupport extends ServiceSupport {
     protected void loadConfigurations(CamelContext camelContext) throws Exception {
         // lets use Camel's bean post processor on any existing configuration classes
         // so the instance has some support for dependency injection
-        CamelBeanPostProcessor postProcessor = camelContext.getBeanPostProcessor();
+        CamelBeanPostProcessor postProcessor = camelContext.adapt(ExtendedCamelContext.class).getBeanPostProcessor();
         for (Object configuration : getConfigurations()) {
             postProcessor.postProcessBeforeInitialization(configuration, configuration.getClass().getName());
             postProcessor.postProcessAfterInitialization(configuration, configuration.getClass().getName());
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java b/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
index 5a7f399..3c375a3 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
@@ -36,6 +36,7 @@ import javax.xml.bind.Unmarshaller;
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.TransformerException;
 
+import org.apache.camel.ExtendedCamelContext;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
@@ -340,7 +341,7 @@ public final class ModelHelper {
     }
 
     private static JAXBContext getJAXBContext(CamelContext context) throws JAXBException {
-        ModelJAXBContextFactory factory = context.getModelJAXBContextFactory();
+        ModelJAXBContextFactory factory = context.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory();
         return factory.newJAXBContext();
     }
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/RestContextRefDefinitionHelper.java b/core/camel-core/src/main/java/org/apache/camel/model/RestContextRefDefinitionHelper.java
index cb47f78..0f0e7a7 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/RestContextRefDefinitionHelper.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/RestContextRefDefinitionHelper.java
@@ -30,6 +30,7 @@ import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.model.language.NamespaceAwareExpression;
 import org.apache.camel.model.rest.RestDefinition;
@@ -92,7 +93,7 @@ public final class RestContextRefDefinitionHelper {
     private static synchronized JAXBContext getOrCreateJAXBContext(final CamelContext camelContext) throws JAXBException {
         if (jaxbContext == null) {
             // must use classloader from CamelContext to have JAXB working
-            jaxbContext = camelContext.getModelJAXBContextFactory().newJAXBContext();
+            jaxbContext = camelContext.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory().newJAXBContext();
         }
         return jaxbContext;
     }
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/RouteContextRefDefinitionHelper.java b/core/camel-core/src/main/java/org/apache/camel/model/RouteContextRefDefinitionHelper.java
index 967390e..45d570c 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/RouteContextRefDefinitionHelper.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/RouteContextRefDefinitionHelper.java
@@ -30,6 +30,7 @@ import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.model.language.NamespaceAwareExpression;
 import org.apache.camel.support.CamelContextHelper;
@@ -89,7 +90,7 @@ public final class RouteContextRefDefinitionHelper {
 
     private static synchronized JAXBContext getOrCreateJAXBContext(final CamelContext camelContext) throws JAXBException {
         if (jaxbContext == null) {
-            jaxbContext = camelContext.getModelJAXBContextFactory().newJAXBContext();
+            jaxbContext = camelContext.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory().newJAXBContext();
         }
         return jaxbContext;
     }
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 afbc382..62cc273 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
@@ -29,6 +29,7 @@ import java.util.Set;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.model.rest.RestDefinition;
@@ -166,7 +167,7 @@ public final class RouteDefinitionHelper {
                 boolean done = false;
                 String id = null;
                 while (!done) {
-                    id = route.idOrCreate(context.getNodeIdFactory());
+                    id = route.idOrCreate(context.adapt(ExtendedCamelContext.class).getNodeIdFactory());
                     done = !customIds.contains(id);
                 }
                 route.setId(id);
@@ -184,7 +185,7 @@ public final class RouteDefinitionHelper {
             if (rest != null && route.isRest()) {
                 VerbDefinition verb = findVerbDefinition(rest, route.getInput().getUri());
                 if (verb != null) {
-                    String id = verb.idOrCreate(context.getNodeIdFactory());
+                    String id = verb.idOrCreate(context.adapt(ExtendedCamelContext.class).getNodeIdFactory());
                     if (!verb.getUsedForGeneratingNodeId()) {
                         id = route.getId();
                     }
@@ -448,7 +449,7 @@ public final class RouteDefinitionHelper {
             // let the route inherit the error handler builder from camel context if none already set
 
             // must clone to avoid side effects while building routes using multiple RouteBuilders
-            ErrorHandlerFactory builder = context.getErrorHandlerFactory();
+            ErrorHandlerFactory builder = context.adapt(ExtendedCamelContext.class).getErrorHandlerFactory();
             if (builder != null) {
                 if (builder instanceof ErrorHandlerBuilder) {
                     builder = ((ErrorHandlerBuilder) builder).cloneBuilder();
@@ -694,7 +695,7 @@ public final class RouteDefinitionHelper {
      */
     public static void forceAssignIds(CamelContext context, final ProcessorDefinition processor) {
         // force id on the child
-        processor.idOrCreate(context.getNodeIdFactory());
+        processor.idOrCreate(context.adapt(ExtendedCamelContext.class).getNodeIdFactory());
 
         // if there was a custom id assigned, then make sure to support property placeholders
         if (processor.hasCustomIdAssigned()) {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
index eb22f4b..314e17c 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
@@ -32,6 +32,7 @@ import javax.xml.bind.annotation.XmlElementRef;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.model.OptionalIdentifiedDefinition;
 import org.apache.camel.model.ProcessorDefinition;
@@ -732,7 +733,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
 
         String routeId = configuration.getApiContextRouteId();
         if (routeId == null) {
-            routeId = answer.idOrCreate(camelContext.getNodeIdFactory());
+            routeId = answer.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
         }
         options.put("routeId", routeId);
         if (configuration.getComponent() != null && !configuration.getComponent().isEmpty()) {
diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/BeanReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/BeanReifier.java
index 67c0617..7b1a1d0 100644
--- a/core/camel-core/src/main/java/org/apache/camel/reifier/BeanReifier.java
+++ b/core/camel-core/src/main/java/org/apache/camel/reifier/BeanReifier.java
@@ -17,6 +17,7 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.model.BeanDefinition;
 import org.apache.camel.model.ProcessorDefinition;
@@ -38,7 +39,7 @@ class BeanReifier extends ProcessorReifier<BeanDefinition> {
         String beanType = definition.getBeanType();
         Class<?> beanClass = definition.getBeanClass();
 
-        return camelContext.getBeanProcessorFactory().createBeanProcessor(camelContext,
+        return camelContext.adapt(ExtendedCamelContext.class).getBeanProcessorFactory().createBeanProcessor(camelContext,
                 bean, beanType, beanClass, ref, method, isCacheBean());
     }
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
index 9cce0d2..5e82784 100644
--- a/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
+++ b/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
@@ -25,6 +25,7 @@ import java.util.function.Function;
 
 import org.apache.camel.Channel;
 import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.model.AggregateDefinition;
 import org.apache.camel.model.BeanDefinition;
@@ -222,8 +223,9 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> {
     protected Processor createChildProcessor(RouteContext routeContext, boolean mandatory) throws Exception {
         Processor children = null;
         // at first use custom factory
-        if (routeContext.getCamelContext().getProcessorFactory() != null) {
-            children = routeContext.getCamelContext().getProcessorFactory().createChildProcessor(routeContext, definition, mandatory);
+        if (routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getProcessorFactory() != null) {
+            children = routeContext.getCamelContext().adapt(ExtendedCamelContext.class)
+                    .getProcessorFactory().createChildProcessor(routeContext, definition, mandatory);
         }
         // fallback to default implementation if factory did not create the child
         if (children == null) {
@@ -448,7 +450,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> {
 
             // inject id
             if (processor instanceof IdAware) {
-                String id = output.idOrCreate(routeContext.getCamelContext().getNodeIdFactory());
+                String id = output.idOrCreate(routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getNodeIdFactory());
                 ((IdAware) processor).setId(id);
             }
 
@@ -476,8 +478,9 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> {
     protected Processor createProcessor(RouteContext routeContext, ProcessorDefinition<?> output) throws Exception {
         Processor processor = null;
         // at first use custom factory
-        if (routeContext.getCamelContext().getProcessorFactory() != null) {
-            processor = routeContext.getCamelContext().getProcessorFactory().createProcessor(routeContext, output);
+        if (routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getProcessorFactory() != null) {
+            processor = routeContext.getCamelContext().adapt(ExtendedCamelContext.class)
+                    .getProcessorFactory().createProcessor(routeContext, output);
         }
         // fallback to default implementation if factory did not create the processor
         if (processor == null) {
@@ -527,8 +530,9 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> {
         }
 
         // at first use custom factory
-        if (routeContext.getCamelContext().getProcessorFactory() != null) {
-            processor = routeContext.getCamelContext().getProcessorFactory().createProcessor(routeContext, definition);
+        if (routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getProcessorFactory() != null) {
+            processor = routeContext.getCamelContext().adapt(ExtendedCamelContext.class)
+                    .getProcessorFactory().createProcessor(routeContext, definition);
         }
         // fallback to default implementation if factory did not create the processor
         if (processor == null) {
@@ -537,7 +541,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> {
 
         // inject id
         if (processor instanceof IdAware) {
-            String id = definition.idOrCreate(routeContext.getCamelContext().getNodeIdFactory());
+            String id = definition.idOrCreate(routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getNodeIdFactory());
             ((IdAware) processor).setId(id);
         }
 
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 2f6ca2a..9932134 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
@@ -23,6 +23,7 @@ import java.util.StringTokenizer;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.FailedToCreateRouteException;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.Processor;
@@ -89,7 +90,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
 
     public Route createRoute(CamelContext camelContext) throws Exception {
         @SuppressWarnings("deprecation")
-        ErrorHandlerFactory handler = camelContext.getErrorHandlerFactory();
+        ErrorHandlerFactory handler = camelContext.adapt(ExtendedCamelContext.class).getErrorHandlerFactory();
         if (handler != null) {
             definition.setErrorHandlerBuilderIfNull(handler);
         }
@@ -161,7 +162,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         // we must check the error handler on builder is not the same as on camel context, as that would be the default
         // context scoped error handler, in case no error handlers was configured
         if (builder.getRouteCollection().getErrorHandlerFactory() != null
-                && camelContext.getErrorHandlerFactory() != builder.getRouteCollection().getErrorHandlerFactory()) {
+                && camelContext.adapt(ExtendedCamelContext.class).getErrorHandlerFactory() != builder.getRouteCollection().getErrorHandlerFactory()) {
             throw new IllegalArgumentException("You can not advice with error handlers. Remove the error handlers from the route builder.");
         }
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/StepReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/StepReifier.java
index 2960c5f..71d8880 100644
--- a/core/camel-core/src/main/java/org/apache/camel/reifier/StepReifier.java
+++ b/core/camel-core/src/main/java/org/apache/camel/reifier/StepReifier.java
@@ -18,6 +18,7 @@ package org.apache.camel.reifier;
 
 import java.util.List;
 
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.StepDefinition;
@@ -37,7 +38,7 @@ class StepReifier extends ProcessorReifier<StepDefinition> {
 
     @Override
     protected Processor createCompositeProcessor(RouteContext routeContext, List<Processor> list) throws Exception {
-        String stepId = definition.idOrCreate(routeContext.getCamelContext().getNodeIdFactory());
+        String stepId = definition.idOrCreate(routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getNodeIdFactory());
         return StepProcessor.newInstance(routeContext.getCamelContext(), list, stepId);
     }
 }
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java
index b625a39..fd72b23 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java
@@ -21,6 +21,7 @@ import java.util.List;
 import org.apache.camel.Channel;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Endpoint;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.impl.engine.EventDrivenConsumerRoute;
@@ -41,7 +42,7 @@ public class ContextErrorHandlerTest extends ContextTestSupport {
         redeliveryPolicy.setUseExponentialBackOff(true);
         DeadLetterChannelBuilder deadLetterChannelBuilder = new DeadLetterChannelBuilder("mock:error");
         deadLetterChannelBuilder.setRedeliveryPolicy(redeliveryPolicy);
-        context.setErrorHandlerFactory(deadLetterChannelBuilder);
+        context.adapt(ExtendedCamelContext.class).setErrorHandlerFactory(deadLetterChannelBuilder);
     }
 
     protected void startCamelContext() throws Exception {
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerBuilderRefTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerBuilderRefTest.java
index 726d919..2479629 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerBuilderRefTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerBuilderRefTest.java
@@ -22,6 +22,7 @@ import java.util.UUID;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.impl.JndiRegistry;
 import org.junit.Test;
 
@@ -43,7 +44,7 @@ public class ErrorHandlerBuilderRefTest extends ContextTestSupport {
     @Override
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
-        context.setErrorHandlerFactory(errorHandlerBuilderRef);
+        context.adapt(ExtendedCamelContext.class).setErrorHandlerFactory(errorHandlerBuilderRef);
         return context;
     }
     
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectRouteBuilderTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectRouteBuilderTest.java
index 21c8a27..2aa96ae 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectRouteBuilderTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectRouteBuilderTest.java
@@ -20,6 +20,7 @@ import org.apache.camel.BeanInject;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.spi.CamelBeanPostProcessor;
@@ -42,7 +43,7 @@ public class BeanInjectRouteBuilderTest extends ContextTestSupport {
         CamelContext context = super.createCamelContext();
 
         // manual post process us as ContextTestSupport in camel-core doesn't do that out of the box
-        CamelBeanPostProcessor post = context.getBeanPostProcessor();
+        CamelBeanPostProcessor post = context.adapt(ExtendedCamelContext.class).getBeanPostProcessor();
         post.postProcessBeforeInitialization(this, "MyRoute");
         post.postProcessAfterInitialization(this, "MyRoute");
         return context;
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/CamelContextAddRestDefinitionsFromXmlTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/CamelContextAddRestDefinitionsFromXmlTest.java
index 8a5844c..82a82cb 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/CamelContextAddRestDefinitionsFromXmlTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/CamelContextAddRestDefinitionsFromXmlTest.java
@@ -23,6 +23,7 @@ import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
 
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.rest.DummyRestConsumerFactory;
 import org.apache.camel.component.rest.DummyRestProcessorFactory;
@@ -47,7 +48,7 @@ public class CamelContextAddRestDefinitionsFromXmlTest extends ContextTestSuppor
     @Before
     public void setUp() throws Exception {
         super.setUp();
-        jaxbContext = context.getModelJAXBContextFactory().newJAXBContext();
+        jaxbContext = context.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory().newJAXBContext();
     }
 
     protected Object parseUri(String uri) throws JAXBException {
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/CamelContextAddRouteDefinitionsFromXmlTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/CamelContextAddRouteDefinitionsFromXmlTest.java
index 13ab63d..cda3d8e 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/CamelContextAddRouteDefinitionsFromXmlTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/CamelContextAddRouteDefinitionsFromXmlTest.java
@@ -23,6 +23,7 @@ import javax.xml.bind.Unmarshaller;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
@@ -37,7 +38,7 @@ public class CamelContextAddRouteDefinitionsFromXmlTest extends ContextTestSuppo
     @Before
     public void setUp() throws Exception {
         super.setUp();
-        jaxbContext = context.getModelJAXBContextFactory().newJAXBContext();
+        jaxbContext = context.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory().newJAXBContext();
     }
 
     protected Object parseUri(String uri) throws JAXBException {
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/CamelProduceInterfaceEventNotifierTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/CamelProduceInterfaceEventNotifierTest.java
index 48eb89e..5b549b0 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/CamelProduceInterfaceEventNotifierTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/CamelProduceInterfaceEventNotifierTest.java
@@ -21,6 +21,7 @@ import java.util.List;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Produce;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.CamelEvent;
@@ -76,7 +77,7 @@ public class CamelProduceInterfaceEventNotifierTest extends ContextTestSupport {
     @Before
     public void setUp() throws Exception {
         super.setUp();
-        postProcessor = context.getBeanPostProcessor();
+        postProcessor = context.adapt(ExtendedCamelContext.class).getBeanPostProcessor();
     }
 
     interface FooService {
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java
index 6bcb218..33a351c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.impl;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
@@ -58,7 +59,7 @@ public class CustomIdFactoryTest extends ContextTestSupport {
             @Override
             public void configure() throws Exception {
                 // use our own id factory so we can generate the keys we like to use
-                context.setNodeIdFactory(new NodeIdFactory() {
+                context.adapt(ExtendedCamelContext.class).setNodeIdFactory(new NodeIdFactory() {
                     public String createId(NamedNode definition) {
                         return "#" + definition.getShortName() + ++counter + "#";
                     }
@@ -117,7 +118,7 @@ public class CustomIdFactoryTest extends ContextTestSupport {
 
             // MUST DO THIS
             // force id creation as sub nodes have lazy assigned ids
-            ((OptionalIdentifiedDefinition<?>) definition).idOrCreate(context.getNodeIdFactory());
+            ((OptionalIdentifiedDefinition<?>) definition).idOrCreate(context.adapt(ExtendedCamelContext.class).getNodeIdFactory());
 
             return new DelegateProcessor(target) {
                 @Override
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorTest.java
index 0c9b282..e27c206 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.impl;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Consume;
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.spi.CamelBeanPostProcessor;
@@ -58,7 +59,7 @@ public class DefaultCamelBeanPostProcessorTest extends ContextTestSupport {
     @Before
     public void setUp() throws Exception {
         super.setUp();
-        postProcessor = context.getBeanPostProcessor();
+        postProcessor = context.adapt(ExtendedCamelContext.class).getBeanPostProcessor();
     }
 
     @BindToRegistry
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/model/RouteIdFactoryTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/model/RouteIdFactoryTest.java
index 621804d..5bc0d17 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/model/RouteIdFactoryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/model/RouteIdFactoryTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.impl.model;
 
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.rest.DummyRestConsumerFactory;
 import org.apache.camel.component.rest.DummyRestProcessorFactory;
@@ -39,7 +40,7 @@ public class RouteIdFactoryTest extends ContextTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                context.setNodeIdFactory(new RouteIdFactory());
+                context.adapt(ExtendedCamelContext.class).setNodeIdFactory(new RouteIdFactory());
                 from("direct:start1?timeout=30000").to("mock:result");
                 from("direct:start2").to("mock:result");
                 rest("/say/hello").get("/bar").to("mock:result");
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/ContextScopedOnExceptionMultipleRouteBuildersTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/ContextScopedOnExceptionMultipleRouteBuildersTest.java
index 1632898..27f7672 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/ContextScopedOnExceptionMultipleRouteBuildersTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/ContextScopedOnExceptionMultipleRouteBuildersTest.java
@@ -18,6 +18,7 @@ package org.apache.camel.issues;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.DeadLetterChannelBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
@@ -51,7 +52,7 @@ public class ContextScopedOnExceptionMultipleRouteBuildersTest extends ContextTe
     @Override
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
-        context.setErrorHandlerFactory(new DeadLetterChannelBuilder("mock:dead"));
+        context.adapt(ExtendedCamelContext.class).setErrorHandlerFactory(new DeadLetterChannelBuilder("mock:dead"));
         return context;
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/OnExceptionContinuedIssueTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/OnExceptionContinuedIssueTest.java
index 8194078..68b065f 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/OnExceptionContinuedIssueTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/OnExceptionContinuedIssueTest.java
@@ -18,6 +18,7 @@ package org.apache.camel.issues;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.DeadLetterChannelBuilder;
 import org.apache.camel.builder.DefaultErrorHandlerBuilder;
@@ -37,7 +38,7 @@ public class OnExceptionContinuedIssueTest extends ContextTestSupport {
         defaultErrorHandlerBuilder.redeliveryDelay(0); // run fast
         defaultErrorHandlerBuilder.maximumRedeliveries(2);
 
-        context.setErrorHandlerFactory(defaultErrorHandlerBuilder);
+        context.adapt(ExtendedCamelContext.class).setErrorHandlerFactory(defaultErrorHandlerBuilder);
         context.addRoutes(new RouteBuilder() {
             @Override
             public void configure() throws Exception {
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionMultipleRouteBuildersTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionMultipleRouteBuildersTest.java
index 0f2ca93..66cb4d8 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionMultipleRouteBuildersTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionMultipleRouteBuildersTest.java
@@ -18,6 +18,7 @@ package org.apache.camel.issues;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.DeadLetterChannelBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
@@ -53,7 +54,7 @@ public class RouteScopedOnExceptionMultipleRouteBuildersTest extends ContextTest
     @Override
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = new DefaultCamelContext(createRegistry());
-        context.setErrorHandlerFactory(new DeadLetterChannelBuilder("mock:dead"));
+        context.adapt(ExtendedCamelContext.class).setErrorHandlerFactory(new DeadLetterChannelBuilder("mock:dead"));
         return context;
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
index 6f97c5a..986df4b 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
@@ -20,6 +20,7 @@ import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
@@ -38,7 +39,7 @@ public class CustomProcessorFactoryTest extends ContextTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         // register our custom factory
-        context.setProcessorFactory(new MyFactory());
+        context.adapt(ExtendedCamelContext.class).setProcessorFactory(new MyFactory());
         return context;
     }
     // END SNIPPET: e1
diff --git a/core/camel-management-impl/src/main/java/org/apache/camel/management/DefaultManagementAgent.java b/core/camel-management-impl/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
index e35ca5a..0906df0 100644
--- a/core/camel-management-impl/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
+++ b/core/camel-management-impl/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
@@ -44,6 +44,7 @@ import javax.management.remote.JMXServiceURL;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.api.management.JmxSystemPropertyKeys;
 import org.apache.camel.spi.ManagementAgent;
@@ -393,7 +394,7 @@ public class DefaultManagementAgent extends ServiceSupport implements Management
         }
 
         // ensure assembler is started
-        assembler = camelContext.getManagementMBeanAssembler();
+        assembler = camelContext.adapt(ExtendedCamelContext.class).getManagementMBeanAssembler();
         if (assembler == null) {
             assembler = new DefaultManagementMBeanAssembler(camelContext);
         }
diff --git a/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java b/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
index ac60b5b..c7186ad 100644
--- a/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
+++ b/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
@@ -17,6 +17,7 @@
 package org.apache.camel.management.mbean;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.ServiceStatus;
@@ -45,14 +46,14 @@ public class ManagedProcessor extends ManagedPerformanceCounter implements Manag
         this.context = context;
         this.processor = processor;
         this.definition = definition;
-        this.id = definition.idOrCreate(context.getNodeIdFactory());
+        this.id = definition.idOrCreate(context.adapt(ExtendedCamelContext.class).getNodeIdFactory());
         StepDefinition step;
         if (definition instanceof StepDefinition) {
             step = (StepDefinition) definition;
         } else {
             step = ProcessorDefinitionHelper.findFirstParentOfType(StepDefinition.class, definition, true);
         }
-        this.stepId = step != null ? step.idOrCreate(context.getNodeIdFactory()) : null;
+        this.stepId = step != null ? step.idOrCreate(context.adapt(ExtendedCamelContext.class).getNodeIdFactory()) : null;
     }
 
     @Override