You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/02/25 14:14:09 UTC

[camel] 05/13: CAMEL-15105: fixed mixed usages of CamelContext and ExtendedCamelContext

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

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

commit cd960bc8a2400caa8350812b9c197595d4895ca0
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Sat Feb 18 13:21:07 2023 +0100

    CAMEL-15105: fixed mixed usages of CamelContext and ExtendedCamelContext
    
    - adjusted to get the actual context extension where necessary
    - fixed casts to one or the other to prevent cast exceptions
---
 .../component/jms/JmsInOnlyPooledExchangeTest.java |  3 ++-
 .../camel/component/knative/KnativeEndpoint.java   |  2 +-
 .../camel/component/knative/KnativeProducer.java   |  2 +-
 .../http/NettyHttpSimplePooledExchangeTest.java    |  3 ++-
 .../sjms/consumer/InOnlyPooledExchangeTest.java    |  3 ++-
 .../camel/impl/engine/AbstractDynamicRegistry.java |  3 +--
 .../impl/engine/CamelPostProcessorHelper.java      |  2 +-
 .../engine/DefaultAutowiredLifecycleStrategy.java  |  2 +-
 ...efaultDependencyInjectionAnnotationFactory.java |  4 ++--
 .../camel/impl/engine/DefaultResourceLoader.java   |  6 ++---
 .../camel/impl/engine/DefaultRouteController.java  |  2 +-
 .../camel/impl/engine/DefaultRoutesLoader.java     |  2 +-
 .../engine/DefaultServiceBootstrapCloseable.java   | 22 +++++++++---------
 .../camel/impl/engine/DefaultUnitOfWork.java       |  4 ++--
 .../camel/language/csimple/CSimpleLanguage.java    |  2 +-
 .../org/apache/camel/processor/PollEnricher.java   |  2 +-
 .../camel/processor/RecipientListProcessor.java    |  6 ++---
 .../org/apache/camel/processor/RoutingSlip.java    |  6 ++---
 .../camel/processor/SendDynamicProcessor.java      |  6 ++---
 .../org/apache/camel/processor/SendProcessor.java  |  2 +-
 .../apache/camel/processor/UnitOfWorkProducer.java |  2 +-
 .../errorhandler/RedeliveryErrorHandler.java       |  6 ++---
 .../file/FileConsumerDeleteExchangePooledTest.java | 15 +++++++------
 .../processor/BatchConsumerPooledExchangeTest.java |  3 ++-
 .../apache/camel/processor/PooledExchangeTest.java |  4 +++-
 .../camel/main/DefaultConfigurationConfigurer.java | 26 +++++++++++-----------
 .../camel/main/MainAutowiredLifecycleStrategy.java |  2 +-
 .../org/apache/camel/support/AbstractExchange.java |  3 +--
 .../apache/camel/support/CamelContextHelper.java   |  9 +++-----
 .../org/apache/camel/support/DefaultMessage.java   |  6 ++---
 .../camel/support/cache/DefaultProducerCache.java  |  6 ++---
 .../camel/support/cache/EmptyProducerCache.java    |  2 +-
 .../builder/endpoint/AbstractEndpointBuilder.java  |  4 ++--
 .../download/DependencyDownloaderRoutesLoader.java |  2 +-
 .../apache/camel/dsl/yaml/common/YamlSupport.java  |  4 ++--
 .../ErrorHandlerBuilderDeserializer.java           |  2 +-
 36 files changed, 92 insertions(+), 88 deletions(-)

diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyPooledExchangeTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyPooledExchangeTest.java
index b12b33e7b15..f4b1b03b388 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyPooledExchangeTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyPooledExchangeTest.java
@@ -85,7 +85,8 @@ public class JmsInOnlyPooledExchangeTest extends AbstractJMSTest {
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        ExtendedCamelContext ecc = (ExtendedCamelContext) super.createCamelContext();
+        CamelContext camelContext = super.createCamelContext();
+        ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
 
         ecc.setExchangeFactory(new PooledExchangeFactory());
         ecc.setProcessorExchangeFactory(new PooledProcessorExchangeFactory());
diff --git a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
index de44eff6919..4b9793ec561 100644
--- a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
+++ b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
@@ -117,7 +117,7 @@ public class KnativeEndpoint extends DefaultEndpoint {
             list.add(replyProcessor);
         }
         CamelContext ecc = getCamelContext();
-        Processor pipeline = ((ExtendedCamelContext) ecc).getProcessorFactory().createProcessor(ecc, "Pipeline", new Object[] { list });
+        Processor pipeline = ecc.getCamelContextExtension().getProcessorFactory().createProcessor(ecc, "Pipeline", new Object[] { list });
 
         Consumer consumer = getComponent().getConsumerFactory().createConsumer(this,
                 createTransportConfiguration(service), service, pipeline);
diff --git a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
index 0099c040349..1be0bbbe16c 100644
--- a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
+++ b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
@@ -42,7 +42,7 @@ public class KnativeProducer extends DefaultAsyncProducer {
         Collections.addAll(elements, processors);
 
         CamelContext ecc = getEndpoint().getCamelContext();
-        Processor pipeline = ((ExtendedCamelContext) ecc).getProcessorFactory().createProcessor(ecc, "Pipeline", new Object[] { elements });
+        Processor pipeline = ecc.getCamelContextExtension().getProcessorFactory().createProcessor(ecc, "Pipeline", new Object[] { elements });
 
         this.processor = AsyncProcessorConverterHelper.convert(pipeline);
     }
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimplePooledExchangeTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimplePooledExchangeTest.java
index 282859e4b77..b7a3b4dc427 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimplePooledExchangeTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimplePooledExchangeTest.java
@@ -39,7 +39,8 @@ public class NettyHttpSimplePooledExchangeTest extends BaseNettyTest {
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        ExtendedCamelContext ecc = (ExtendedCamelContext) super.createCamelContext();
+        CamelContext camelContext = super.createCamelContext();
+        ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
 
         ecc.setExchangeFactory(new PooledExchangeFactory());
         ecc.setProcessorExchangeFactory(new PooledProcessorExchangeFactory());
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyPooledExchangeTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyPooledExchangeTest.java
index 4de9c3ef9df..aee5be9ef98 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyPooledExchangeTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyPooledExchangeTest.java
@@ -38,7 +38,8 @@ public class InOnlyPooledExchangeTest extends JmsTestSupport {
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        ExtendedCamelContext ecc = (ExtendedCamelContext) super.createCamelContext();
+        CamelContext camelContext = super.createCamelContext();
+        ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
 
         ecc.setExchangeFactory(new PooledExchangeFactory());
         ecc.setProcessorExchangeFactory(new PooledProcessorExchangeFactory());
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractDynamicRegistry.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractDynamicRegistry.java
index 72ddc94d891..7fd96abc8be 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractDynamicRegistry.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractDynamicRegistry.java
@@ -30,7 +30,6 @@ import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.StaticService;
 import org.apache.camel.spi.RouteController;
 import org.apache.camel.support.LRUCache;
@@ -96,7 +95,7 @@ public class AbstractDynamicRegistry<K, V> extends AbstractMap<K, V> implements
 
         // we want endpoint or transformer to be static if they are part of
         // starting up camel, or if new routes are being setup/added or routes started later
-        if (!context.isStarted() || ((ExtendedCamelContext) context).isSetupRoutes() || routeController.isStartingRoutes()) {
+        if (!context.isStarted() || context.getCamelContextExtension().isSetupRoutes() || routeController.isStartingRoutes()) {
             answer = staticMap.put(key, obj);
         } else {
             answer = dynamicMap.put(key, obj);
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelPostProcessorHelper.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelPostProcessorHelper.java
index 5444bd73e77..7896e2f8b95 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelPostProcessorHelper.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelPostProcessorHelper.java
@@ -419,7 +419,7 @@ public class CamelPostProcessorHelper implements CamelContextAware {
         String[] names = new String[] {
                 type.getName() + "-configurer", type.getSimpleName() + "-configurer", rootKey + "-configurer" };
         for (String n : names) {
-            configurer = ((ExtendedCamelContext) ecc).getConfigurerResolver().resolvePropertyConfigurer(n, ecc);
+            configurer = ecc.getCamelContextExtension().getConfigurerResolver().resolvePropertyConfigurer(n, ecc);
             if (configurer != null) {
                 break;
             }
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultAutowiredLifecycleStrategy.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultAutowiredLifecycleStrategy.java
index 9194b984048..1e40c1c44af 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultAutowiredLifecycleStrategy.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultAutowiredLifecycleStrategy.java
@@ -87,7 +87,7 @@ class DefaultAutowiredLifecycleStrategy extends LifecycleStrategySupport impleme
     }
 
     private void autwire(String name, String kind, Object target) {
-        PropertyConfigurer pc = ((ExtendedCamelContext) camelContext).getConfigurerResolver().resolvePropertyConfigurer(name + "-" + kind, camelContext);
+        PropertyConfigurer pc = camelContext.getCamelContextExtension().getConfigurerResolver().resolvePropertyConfigurer(name + "-" + kind, camelContext);
         if (pc instanceof PropertyConfigurerGetter) {
             PropertyConfigurerGetter getter = (PropertyConfigurerGetter) pc;
             String[] names = getter.getAutowiredNames();
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDependencyInjectionAnnotationFactory.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDependencyInjectionAnnotationFactory.java
index ff5709b9fd7..61ce0ccec49 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDependencyInjectionAnnotationFactory.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDependencyInjectionAnnotationFactory.java
@@ -49,9 +49,9 @@ public class DefaultDependencyInjectionAnnotationFactory
         return () -> {
             if (beanPostProcess) {
                 try {
-                    ((ExtendedCamelContext) camelContext).getBeanPostProcessor()
+                    camelContext.getCamelContextExtension().getBeanPostProcessor()
                             .postProcessBeforeInitialization(bean, beanName);
-                    ((ExtendedCamelContext) camelContext).getBeanPostProcessor()
+                    camelContext.getCamelContextExtension().getBeanPostProcessor()
                             .postProcessAfterInitialization(bean, beanName);
                 } catch (Exception e) {
                     throw RuntimeCamelException.wrapRuntimeException(e);
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceLoader.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceLoader.java
index decd75109b8..e0b1c2c66dc 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceLoader.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceLoader.java
@@ -164,10 +164,10 @@ public class DefaultResourceLoader extends ServiceSupport implements ResourceLoa
      * @return        a {@link RoutesBuilderLoader} or <code>null</code> if none found.
      */
     private ResourceResolver resolveService(String scheme) {
-        final CamelContext ecc = getCamelContext();
-        final FactoryFinder finder = ((ExtendedCamelContext) ecc).getBootstrapFactoryFinder(ResourceResolver.FACTORY_PATH);
+        final CamelContext context = getCamelContext();
+        final FactoryFinder finder = context.getCamelContextExtension().getBootstrapFactoryFinder(ResourceResolver.FACTORY_PATH);
 
-        ResourceResolver rr = ResolverHelper.resolveService(ecc, finder, scheme, ResourceResolver.class).orElse(null);
+        ResourceResolver rr = ResolverHelper.resolveService(context, finder, scheme, ResourceResolver.class).orElse(null);
         if (rr != null) {
             CamelContextAware.trySetCamelContext(rr, getCamelContext());
             ServiceHelper.startService(rr);
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java
index 3e9e2ad4250..bc4a8874b4a 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java
@@ -86,7 +86,7 @@ public class DefaultRouteController extends ServiceSupport implements RouteContr
     // ***************************************************
 
     protected RouteController getInternalRouteController() {
-        return ((ExtendedCamelContext) camelContext).getInternalRouteController();
+        return camelContext.getCamelContextExtension().getInternalRouteController();
     }
 
     @Override
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java
index 4fa5390c2af..0548129218f 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java
@@ -159,7 +159,7 @@ public class DefaultRoutesLoader extends ServiceSupport implements RoutesLoader,
      */
     protected RoutesBuilderLoader resolveService(String extension) {
         final CamelContext ecc = getCamelContext();
-        final FactoryFinder finder = ((ExtendedCamelContext) ecc).getBootstrapFactoryFinder(RoutesBuilderLoader.FACTORY_PATH);
+        final FactoryFinder finder = ecc.getCamelContextExtension().getBootstrapFactoryFinder(RoutesBuilderLoader.FACTORY_PATH);
 
         RoutesBuilderLoader answer
                 = ResolverHelper.resolveService(getCamelContext(), finder, extension, RoutesBuilderLoader.class).orElse(null);
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultServiceBootstrapCloseable.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultServiceBootstrapCloseable.java
index e80ec827ea4..4700f6778c5 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultServiceBootstrapCloseable.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultServiceBootstrapCloseable.java
@@ -38,10 +38,12 @@ public class DefaultServiceBootstrapCloseable implements BootstrapCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(DefaultServiceBootstrapCloseable.class);
 
-    private final ExtendedCamelContext camelContext;
+    private final CamelContext camelContext;
+    private final ExtendedCamelContext camelContextExtension;
 
     public DefaultServiceBootstrapCloseable(CamelContext camelContext) {
-        this.camelContext = (ExtendedCamelContext) camelContext;
+        this.camelContext = camelContext;
+        this.camelContextExtension = camelContext.getCamelContextExtension();
     }
 
     @Override
@@ -50,7 +52,7 @@ public class DefaultServiceBootstrapCloseable implements BootstrapCloseable {
         ConfigurerStrategy.clearBootstrapConfigurers();
 
         Set<Service> set
-                = camelContext.getServices().stream().filter(s -> s instanceof BootstrapCloseable).collect(Collectors.toSet());
+                = camelContextExtension.getServices().stream().filter(s -> s instanceof BootstrapCloseable).collect(Collectors.toSet());
         // its a bootstrap service
         for (Service service : set) {
             try {
@@ -58,14 +60,14 @@ public class DefaultServiceBootstrapCloseable implements BootstrapCloseable {
                     ((BootstrapCloseable) service).close();
                 }
                 // service is no longer needed as it was only intended during bootstrap
-                ((CamelContext) camelContext).removeService(service);
+                camelContext.removeService(service);
             } catch (Exception e) {
                 LOG.warn("Error during closing bootstrap service. This exception is ignored", e);
             }
         }
 
         // clear bootstrap configurer resolver
-        ConfigurerResolver cr = camelContext.getBootstrapConfigurerResolver();
+        ConfigurerResolver cr = camelContextExtension.getBootstrapConfigurerResolver();
         if (cr instanceof BootstrapCloseable) {
             try {
                 ((BootstrapCloseable) cr).close();
@@ -73,10 +75,10 @@ public class DefaultServiceBootstrapCloseable implements BootstrapCloseable {
                 LOG.warn("Error during closing bootstrap service. This exception is ignored", e);
             }
         }
-        camelContext.setBootstrapConfigurerResolver(null);
+        camelContextExtension.setBootstrapConfigurerResolver(null);
 
         // clear processor factory
-        ProcessorFactory pf = camelContext.getProcessorFactory();
+        ProcessorFactory pf = camelContextExtension.getProcessorFactory();
         if (pf instanceof BootstrapCloseable) {
             try {
                 ((BootstrapCloseable) pf).close();
@@ -84,10 +86,10 @@ public class DefaultServiceBootstrapCloseable implements BootstrapCloseable {
                 LOG.warn("Error during closing bootstrap service. This exception is ignored", e);
             }
         }
-        camelContext.setProcessorFactory(null);
+        camelContextExtension.setProcessorFactory(null);
 
         // clear bootstrap factory finder
-        FactoryFinder ff = camelContext.getBootstrapFactoryFinder();
+        FactoryFinder ff = camelContextExtension.getBootstrapFactoryFinder();
         if (ff instanceof BootstrapCloseable) {
             try {
                 ((BootstrapCloseable) ff).close();
@@ -95,7 +97,7 @@ public class DefaultServiceBootstrapCloseable implements BootstrapCloseable {
                 LOG.warn("Error during closing bootstrap service. This exception is ignored", e);
             }
         }
-        camelContext.setBootstrapFactoryFinder(null);
+        camelContextExtension.setBootstrapFactoryFinder(null);
     }
 
 }
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
index fca1ba8e3f6..82cc1552f83 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
@@ -129,7 +129,7 @@ public class DefaultUnitOfWork implements UnitOfWork {
         }
 
         // fire event
-        if (((ExtendedCamelContext) context).isEventNotificationApplicable()) {
+        if (context.getCamelContextExtension().isEventNotificationApplicable()) {
             try {
                 EventHelper.notifyExchangeCreated(context, exchange);
             } catch (Throwable e) {
@@ -239,7 +239,7 @@ public class DefaultUnitOfWork implements UnitOfWork {
         // unregister from inflight registry, before signalling we are done
         inflightRepository.remove(exchange);
 
-        if (((ExtendedCamelContext) context).isEventNotificationApplicable()) {
+        if (context.getCamelContextExtension().isEventNotificationApplicable()) {
             // then fire event to signal the exchange is done
             try {
                 if (failed) {
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java
index 1ab509c14c7..02d8e7c8fd2 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleLanguage.java
@@ -247,7 +247,7 @@ public class CSimpleLanguage extends TypedLanguageSupport implements StaticServi
 
             // detect custom compiler (camel-csimple-joor)
             CamelContext ecc = getCamelContext();
-            Optional<Class<?>> clazz = ((ExtendedCamelContext) ecc).getBootstrapFactoryFinder().findClass(CSimpleCompiler.FACTORY);
+            Optional<Class<?>> clazz = ecc.getCamelContextExtension().getBootstrapFactoryFinder().findClass(CSimpleCompiler.FACTORY);
             if (clazz.isPresent()) {
                 compiler = (CSimpleCompiler) ecc.getInjector().newInstance(clazz.get(), false);
                 if (compiler != null) {
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java
index b1dec50a5eb..0a5cb044554 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java
@@ -364,7 +364,7 @@ public class PollEnricher extends AsyncProcessorSupport implements IdAware, Rout
                 uri = ecc.getTypeConverter().mandatoryConvertTo(String.class, exchange, recipient);
             }
             // optimize and normalize endpoint
-            return ((ExtendedCamelContext) ecc).normalizeUri(uri);
+            return ecc.getCamelContextExtension().normalizeUri(uri);
         }
         return null;
     }
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
index e9d6dabdc8e..3dbb3512b4e 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
@@ -344,7 +344,7 @@ public class RecipientListProcessor extends MulticastProcessor {
                 uri = ecc.getTypeConverter().mandatoryConvertTo(String.class, exchange, recipient);
             }
             // optimize and normalize endpoint
-            return ((ExtendedCamelContext) ecc).normalizeUri(uri);
+            return ecc.getCamelContextExtension().normalizeUri(uri);
         }
         return null;
     }
@@ -356,8 +356,8 @@ public class RecipientListProcessor extends MulticastProcessor {
         if (recipient != null) {
             if (recipient instanceof NormalizedEndpointUri) {
                 NormalizedEndpointUri nu = (NormalizedEndpointUri) recipient;
-                ExtendedCamelContext ecc = (ExtendedCamelContext) exchange.getContext();
-                return ecc.hasEndpoint(nu);
+                CamelContext ecc = exchange.getContext();
+                return ecc.getCamelContextExtension().hasEndpoint(nu);
             } else {
                 String uri = recipient.toString().trim();
                 return exchange.getContext().hasEndpoint(uri);
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RoutingSlip.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RoutingSlip.java
index 0313dc26c06..fddd68f455f 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RoutingSlip.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RoutingSlip.java
@@ -335,7 +335,7 @@ public class RoutingSlip extends AsyncProcessorSupport implements Traceable, IdA
                 uri = ecc.getTypeConverter().mandatoryConvertTo(String.class, exchange, recipient);
             }
             // optimize and normalize endpoint
-            return ((ExtendedCamelContext) ecc).normalizeUri(uri);
+            return ecc.getCamelContextExtension().normalizeUri(uri);
         }
         return null;
     }
@@ -347,8 +347,8 @@ public class RoutingSlip extends AsyncProcessorSupport implements Traceable, IdA
         if (recipient != null) {
             if (recipient instanceof NormalizedEndpointUri) {
                 NormalizedEndpointUri nu = (NormalizedEndpointUri) recipient;
-                ExtendedCamelContext ecc = (ExtendedCamelContext) exchange.getContext();
-                return ecc.hasEndpoint(nu);
+                CamelContext ecc = exchange.getContext();
+                return ecc.getCamelContextExtension().hasEndpoint(nu);
             } else {
                 String uri = recipient.toString();
                 return exchange.getContext().hasEndpoint(uri);
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java
index d0c1e50db70..517f888681e 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java
@@ -268,7 +268,7 @@ public class SendDynamicProcessor extends AsyncProcessorSupport implements IdAwa
                 throw new ResolveEndpointFailedException(uri, "Endpoint should include scheme:path");
             }
             // optimize and normalize endpoint
-            return ((ExtendedCamelContext) ecc).normalizeUri(uri);
+            return ecc.getCamelContextExtension().normalizeUri(uri);
         }
         return null;
     }
@@ -280,8 +280,8 @@ public class SendDynamicProcessor extends AsyncProcessorSupport implements IdAwa
         if (recipient != null) {
             if (recipient instanceof NormalizedEndpointUri) {
                 NormalizedEndpointUri nu = (NormalizedEndpointUri) recipient;
-                ExtendedCamelContext ecc = (ExtendedCamelContext) exchange.getContext();
-                return ecc.hasEndpoint(nu);
+                CamelContext ecc = exchange.getContext();
+                return ecc.getCamelContextExtension().hasEndpoint(nu);
             } else {
                 String uri = recipient.toString();
                 return exchange.getContext().hasEndpoint(uri);
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/SendProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SendProcessor.java
index 47bb1e24851..18dad2208b3 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/SendProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SendProcessor.java
@@ -140,7 +140,7 @@ public class SendProcessor extends AsyncProcessorSupport implements Traceable, E
             // set property which endpoint we send to
             exchange.setProperty(ExchangePropertyKey.TO_ENDPOINT, destination.getEndpointUri());
 
-            final boolean sending = ((ExtendedCamelContext) camelContext).isEventNotificationApplicable()
+            final boolean sending = camelContext.getCamelContextExtension().isEventNotificationApplicable()
                     && EventHelper.notifyExchangeSending(exchange.getContext(), target, destination);
             // record timing for sending the exchange using the producer
             StopWatch watch;
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java
index f0a986cabab..eb0f21456e0 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java
@@ -44,7 +44,7 @@ public final class UnitOfWorkProducer extends DefaultAsyncProducer {
         this.producer = producer;
         // wrap in unit of work
         CamelContext ecc = producer.getEndpoint().getCamelContext();
-        this.processor = ((ExtendedCamelContext) ecc).getInternalProcessorFactory()
+        this.processor = ecc.getCamelContextExtension().getInternalProcessorFactory()
                 .addUnitOfWorkProcessorAdvice(ecc, producer, null);
     }
 
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
index d6e08dd786e..b6197da58b6 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
@@ -879,7 +879,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
             }
 
             // emmit event we are doing redelivery
-            if (((ExtendedCamelContext) camelContext).isEventNotificationApplicable()) {
+            if (camelContext.getCamelContextExtension().isEventNotificationApplicable()) {
                 EventHelper.notifyExchangeRedelivery(exchange.getContext(), exchange, redeliveryCounter);
             }
 
@@ -1181,7 +1181,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
                 // fire event as we had a failure processor to handle it, which there is a event for
                 final boolean deadLetterChannel = processor == deadLetter;
 
-                if (((ExtendedCamelContext) camelContext).isEventNotificationApplicable()) {
+                if (camelContext.getCamelContextExtension().isEventNotificationApplicable()) {
                     EventHelper.notifyExchangeFailureHandling(exchange.getContext(), exchange, processor, deadLetterChannel,
                             deadLetterUri);
                 }
@@ -1193,7 +1193,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
                     try {
                         prepareExchangeAfterFailure(exchange, isDeadLetterChannel, shouldHandle, shouldContinue);
                         // fire event as we had a failure processor to handle it, which there is a event for
-                        if (((ExtendedCamelContext) camelContext).isEventNotificationApplicable()) {
+                        if (camelContext.getCamelContextExtension().isEventNotificationApplicable()) {
                             EventHelper.notifyExchangeFailureHandled(exchange.getContext(), exchange, processor,
                                     deadLetterChannel, deadLetterUri);
                         }
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerDeleteExchangePooledTest.java b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerDeleteExchangePooledTest.java
index a9527bc6b08..1fdd8cc4808 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerDeleteExchangePooledTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerDeleteExchangePooledTest.java
@@ -34,21 +34,22 @@ public class FileConsumerDeleteExchangePooledTest extends ContextTestSupport {
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        ExtendedCamelContext context = (ExtendedCamelContext) super.createCamelContext();
+        CamelContext context = super.createCamelContext();
+        ExtendedCamelContext extendedCamelContext = context.getCamelContextExtension();
 
-        context.getExchangeFactoryManager().setStatisticsEnabled(true);
+        extendedCamelContext.getExchangeFactoryManager().setStatisticsEnabled(true);
 
         PooledExchangeFactory pef = new PooledExchangeFactory();
-        context.setExchangeFactory(pef);
+        extendedCamelContext.setExchangeFactory(pef);
 
-        context.getExchangeFactory().setStatisticsEnabled(true);
-        context.getProcessorExchangeFactory().setStatisticsEnabled(true);
-        return (CamelContext) context;
+        extendedCamelContext.getExchangeFactory().setStatisticsEnabled(true);
+        extendedCamelContext.getProcessorExchangeFactory().setStatisticsEnabled(true);
+        return (CamelContext) extendedCamelContext;
     }
 
     @Test
     public void testDelete() throws Exception {
-        ExtendedCamelContext ecc = (ExtendedCamelContext) context;
+        ExtendedCamelContext ecc = context.getCamelContextExtension();
         assertEquals(0, ecc.getExchangeFactoryManager().getStatistics().getReleasedCounter());
 
         MockEndpoint mock = getMockEndpoint("mock:result");
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/BatchConsumerPooledExchangeTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/BatchConsumerPooledExchangeTest.java
index 9dc77c6203a..073891fb285 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/BatchConsumerPooledExchangeTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/BatchConsumerPooledExchangeTest.java
@@ -44,7 +44,8 @@ public class BatchConsumerPooledExchangeTest extends ContextTestSupport {
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        ExtendedCamelContext ecc = (ExtendedCamelContext) super.createCamelContext();
+        CamelContext camelContext = super.createCamelContext();
+        ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
 
         ecc.setExchangeFactory(new PooledExchangeFactory());
         ecc.setProcessorExchangeFactory(new PooledProcessorExchangeFactory());
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeTest.java
index f435eb8f2c3..d035114412e 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeTest.java
@@ -42,7 +42,9 @@ class PooledExchangeTest extends ContextTestSupport {
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        ExtendedCamelContext ecc = (ExtendedCamelContext) super.createCamelContext();
+        CamelContext camelContext = super.createCamelContext();
+        ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
+
         ecc.setExchangeFactory(new PooledExchangeFactory());
         ecc.setProcessorExchangeFactory(new PooledProcessorExchangeFactory());
         ecc.getExchangeFactory().setStatisticsEnabled(true);
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
index a324bccb355..8c17982ffac 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
@@ -364,11 +364,11 @@ public final class DefaultConfigurationConfigurer {
 
         StartupStepRecorder ssr = getSingleBeanOfType(registry, StartupStepRecorder.class);
         if (ssr != null) {
-            ((ExtendedCamelContext) ecc).setStartupStepRecorder(ssr);
+            ecc.getCamelContextExtension().setStartupStepRecorder(ssr);
         }
         CliConnectorFactory ccf = getSingleBeanOfType(registry, CliConnectorFactory.class);
         if (ccf != null) {
-            ((ExtendedCamelContext) ecc).setCliConnectorFactory(ccf);
+            ecc.getCamelContextExtension().setCliConnectorFactory(ccf);
         }
         PropertiesComponent pc = getSingleBeanOfType(registry, PropertiesComponent.class);
         if (pc != null) {
@@ -384,7 +384,7 @@ public final class DefaultConfigurationConfigurer {
         }
         AsyncProcessorAwaitManager apam = getSingleBeanOfType(registry, AsyncProcessorAwaitManager.class);
         if (apam != null) {
-            ((ExtendedCamelContext) ecc).setAsyncProcessorAwaitManager(apam);
+            ecc.getCamelContextExtension().setAsyncProcessorAwaitManager(apam);
         }
         ManagementStrategy ms = getSingleBeanOfType(registry, ManagementStrategy.class);
         if (ms != null) {
@@ -400,7 +400,7 @@ public final class DefaultConfigurationConfigurer {
         }
         UnitOfWorkFactory uowf = getSingleBeanOfType(registry, UnitOfWorkFactory.class);
         if (uowf != null) {
-            ((ExtendedCamelContext) ecc).setUnitOfWorkFactory(uowf);
+            ecc.getCamelContextExtension().setUnitOfWorkFactory(uowf);
         }
         RuntimeEndpointRegistry rer = getSingleBeanOfType(registry, RuntimeEndpointRegistry.class);
         if (rer != null) {
@@ -408,7 +408,7 @@ public final class DefaultConfigurationConfigurer {
         }
         ModelJAXBContextFactory mjcf = getSingleBeanOfType(registry, ModelJAXBContextFactory.class);
         if (mjcf != null) {
-            ((ExtendedCamelContext) ecc).setModelJAXBContextFactory(mjcf);
+            ecc.getCamelContextExtension().setModelJAXBContextFactory(mjcf);
         }
         ClassResolver cr = getSingleBeanOfType(registry, ClassResolver.class);
         if (cr != null) {
@@ -416,7 +416,7 @@ public final class DefaultConfigurationConfigurer {
         }
         FactoryFinderResolver ffr = getSingleBeanOfType(registry, FactoryFinderResolver.class);
         if (ffr != null) {
-            ((ExtendedCamelContext) ecc).setFactoryFinderResolver(ffr);
+            ecc.getCamelContextExtension().setFactoryFinderResolver(ffr);
         }
         RouteController rc = getSingleBeanOfType(registry, RouteController.class);
         if (rc != null) {
@@ -436,7 +436,7 @@ public final class DefaultConfigurationConfigurer {
         }
         ProcessorFactory pf = getSingleBeanOfType(registry, ProcessorFactory.class);
         if (pf != null) {
-            ((ExtendedCamelContext) ecc).setProcessorFactory(pf);
+            ecc.getCamelContextExtension().setProcessorFactory(pf);
         }
         Debugger debugger = getSingleBeanOfType(registry, Debugger.class);
         if (debugger != null) {
@@ -444,7 +444,7 @@ public final class DefaultConfigurationConfigurer {
         }
         NodeIdFactory nif = getSingleBeanOfType(registry, NodeIdFactory.class);
         if (nif != null) {
-            ((ExtendedCamelContext) ecc).setNodeIdFactory(nif);
+            ecc.getCamelContextExtension().setNodeIdFactory(nif);
         }
         MessageHistoryFactory mhf = getSingleBeanOfType(registry, MessageHistoryFactory.class);
         if (mhf != null) {
@@ -452,7 +452,7 @@ public final class DefaultConfigurationConfigurer {
         }
         ReactiveExecutor re = getSingleBeanOfType(registry, ReactiveExecutor.class);
         if (re != null) {
-            ((ExtendedCamelContext) ecc).setReactiveExecutor(re);
+            ecc.getCamelContextExtension().setReactiveExecutor(re);
         }
         ShutdownStrategy ss = getSingleBeanOfType(registry, ShutdownStrategy.class);
         if (ss != null) {
@@ -460,7 +460,7 @@ public final class DefaultConfigurationConfigurer {
         }
         ExchangeFactory exf = getSingleBeanOfType(registry, ExchangeFactory.class);
         if (exf != null) {
-            ((ExtendedCamelContext) ecc).setExchangeFactory(exf);
+            ecc.getCamelContextExtension().setExchangeFactory(exf);
         }
         Set<TypeConverters> tcs = registry.findByType(TypeConverters.class);
         if (!tcs.isEmpty()) {
@@ -468,7 +468,7 @@ public final class DefaultConfigurationConfigurer {
         }
         Set<EndpointStrategy> ess = registry.findByType(EndpointStrategy.class);
         if (!ess.isEmpty()) {
-            ess.forEach(((ExtendedCamelContext) ecc)::registerEndpointCallback);
+            ess.forEach(ecc.getCamelContextExtension()::registerEndpointCallback);
         }
         Set<CamelClusterService> csss = registry.findByType(CamelClusterService.class);
         if (!csss.isEmpty()) {
@@ -500,9 +500,9 @@ public final class DefaultConfigurationConfigurer {
         Map<String, LogListener> logListeners = registry.findByTypeWithName(LogListener.class);
         if (logListeners != null && !logListeners.isEmpty()) {
             for (LogListener logListener : logListeners.values()) {
-                boolean contains = ((ExtendedCamelContext) ecc).getLogListeners() != null && ((ExtendedCamelContext) ecc).getLogListeners().contains(logListener);
+                boolean contains = ecc.getCamelContextExtension().getLogListeners() != null && ecc.getCamelContextExtension().getLogListeners().contains(logListener);
                 if (!contains) {
-                    ((ExtendedCamelContext) ecc).addLogListener(logListener);
+                    ecc.getCamelContextExtension().addLogListener(logListener);
                 }
             }
         }
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/MainAutowiredLifecycleStrategy.java b/core/camel-main/src/main/java/org/apache/camel/main/MainAutowiredLifecycleStrategy.java
index 7938e7e66f2..0fdad00eb8b 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/MainAutowiredLifecycleStrategy.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/MainAutowiredLifecycleStrategy.java
@@ -129,7 +129,7 @@ public class MainAutowiredLifecycleStrategy extends LifecycleStrategySupport imp
     }
 
     private void autwire(String name, String kind, Object target) {
-        PropertyConfigurer pc = ((ExtendedCamelContext) camelContext).getConfigurerResolver().resolvePropertyConfigurer(name + "-" + kind, camelContext);
+        PropertyConfigurer pc = camelContext.getCamelContextExtension().getConfigurerResolver().resolvePropertyConfigurer(name + "-" + kind, camelContext);
         if (pc instanceof PropertyConfigurerGetter) {
             PropertyConfigurerGetter getter = (PropertyConfigurerGetter) pc;
             String[] names = getter.getAutowiredNames();
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
index 6c735bfcea2..66639a10986 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
@@ -193,8 +193,7 @@ class AbstractExchange implements Exchange {
         }
 
         if (context != null) {
-            ExtendedCamelContext ecc = (ExtendedCamelContext) context;
-            HeadersMapFactory factory = ecc.getHeadersMapFactory();
+            HeadersMapFactory factory = context.getCamelContextExtension().getHeadersMapFactory();
             if (factory != null) {
                 return factory.newMap(headers);
             }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java
index 04feb748bc1..00974812318 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java
@@ -73,8 +73,7 @@ public final class CamelContextHelper {
      */
     public static Endpoint getMandatoryEndpoint(CamelContext camelContext, NormalizedEndpointUri uri)
             throws NoSuchEndpointException {
-        ExtendedCamelContext ecc = (ExtendedCamelContext) camelContext;
-        Endpoint endpoint = ecc.getEndpoint(uri);
+        Endpoint endpoint = camelContext.getCamelContextExtension().getEndpoint(uri);
         if (endpoint == null) {
             throw new NoSuchEndpointException(uri.getUri());
         } else {
@@ -88,8 +87,7 @@ public final class CamelContextHelper {
      */
     public static Endpoint getMandatoryPrototypeEndpoint(CamelContext camelContext, String uri)
             throws NoSuchEndpointException {
-        ExtendedCamelContext ecc = (ExtendedCamelContext) camelContext;
-        Endpoint endpoint = ecc.getPrototypeEndpoint(uri);
+        Endpoint endpoint = camelContext.getCamelContextExtension().getPrototypeEndpoint(uri);
         if (endpoint == null) {
             throw new NoSuchEndpointException(uri);
         } else {
@@ -103,8 +101,7 @@ public final class CamelContextHelper {
      */
     public static Endpoint getMandatoryPrototypeEndpoint(CamelContext camelContext, NormalizedEndpointUri uri)
             throws NoSuchEndpointException {
-        ExtendedCamelContext ecc = (ExtendedCamelContext) camelContext;
-        Endpoint endpoint = ecc.getPrototypeEndpoint(uri);
+        Endpoint endpoint = camelContext.getCamelContextExtension().getPrototypeEndpoint(uri);
         if (endpoint == null) {
             throw new NoSuchEndpointException(uri.getUri());
         } else {
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessage.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessage.java
index 227e9c5503f..13b264b40d9 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessage.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessage.java
@@ -284,13 +284,13 @@ public class DefaultMessage extends MessageSupport {
 
     @Override
     public void setHeaders(Map<String, Object> headers) {
-        HeadersMapFactory factory = ((ExtendedCamelContext) camelContext).getHeadersMapFactory();
+        HeadersMapFactory factory = camelContext.getCamelContextExtension().getHeadersMapFactory();
         if (factory != null) {
             if (factory.isInstanceOf(headers)) {
                 this.headers = headers;
             } else {
                 // create a new map
-                this.headers = ((ExtendedCamelContext) camelContext).getHeadersMapFactory().newMap(headers);
+                this.headers = camelContext.getCamelContextExtension().getHeadersMapFactory().newMap(headers);
             }
         } else {
             // should not really happen but some tests rely on using camel context that is not started
@@ -321,7 +321,7 @@ public class DefaultMessage extends MessageSupport {
     protected Map<String, Object> createHeaders() {
         Map<String, Object> map;
 
-        HeadersMapFactory factory = ((ExtendedCamelContext) camelContext).getHeadersMapFactory();
+        HeadersMapFactory factory = camelContext.getCamelContextExtension().getHeadersMapFactory();
         if (factory != null) {
             map = factory.newMap();
         } else {
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/cache/DefaultProducerCache.java b/core/camel-support/src/main/java/org/apache/camel/support/cache/DefaultProducerCache.java
index 2af56257fc9..01bed50862d 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/cache/DefaultProducerCache.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/cache/DefaultProducerCache.java
@@ -189,7 +189,7 @@ public class DefaultProducerCache extends ServiceSupport implements ProducerCach
             // send the exchange using the processor
             StopWatch watch = null;
             try {
-                if (eventNotifierEnabled && ((ExtendedCamelContext) camelContext).isEventNotificationApplicable()) {
+                if (eventNotifierEnabled && camelContext.getCamelContextExtension().isEventNotificationApplicable()) {
                     boolean sending = EventHelper.notifyExchangeSending(exchange.getContext(), exchange, endpoint);
                     if (sending) {
                         watch = new StopWatch();
@@ -313,7 +313,7 @@ public class DefaultProducerCache extends ServiceSupport implements ProducerCach
         try {
             // record timing for sending the exchange using the producer
             StopWatch watch;
-            if (eventNotifierEnabled && ((ExtendedCamelContext) camelContext).isEventNotificationApplicable()) {
+            if (eventNotifierEnabled && camelContext.getCamelContextExtension().isEventNotificationApplicable()) {
                 boolean sending = EventHelper.notifyExchangeSending(exchange.getContext(), exchange, endpoint);
                 if (sending) {
                     watch = new StopWatch();
@@ -360,7 +360,7 @@ public class DefaultProducerCache extends ServiceSupport implements ProducerCach
 
         // send the exchange using the processor
         try {
-            if (eventNotifierEnabled && ((ExtendedCamelContext) camelContext).isEventNotificationApplicable()) {
+            if (eventNotifierEnabled && camelContext.getCamelContextExtension().isEventNotificationApplicable()) {
                 callback = new EventNotifierCallback(callback, exchange, endpoint);
             }
             // invoke the asynchronous method
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/cache/EmptyProducerCache.java b/core/camel-support/src/main/java/org/apache/camel/support/cache/EmptyProducerCache.java
index c3aceb9747d..ee6e88f765b 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/cache/EmptyProducerCache.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/cache/EmptyProducerCache.java
@@ -41,7 +41,7 @@ public class EmptyProducerCache extends DefaultProducerCache {
         AsyncProducer answer;
         try {
             answer = endpoint.createAsyncProducer();
-            boolean startingRoutes = ((ExtendedCamelContext) ecc).isSetupRoutes() || ecc.getRouteController().isStartingRoutes();
+            boolean startingRoutes = ecc.getCamelContextExtension().isSetupRoutes() || ecc.getRouteController().isStartingRoutes();
             if (startingRoutes && answer.isSingleton()) {
                 // if we are currently starting a route, then add as service and enlist in JMX
                 // - but do not enlist non-singletons in JMX
diff --git a/dsl/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/AbstractEndpointBuilder.java b/dsl/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/AbstractEndpointBuilder.java
index 5c79a037d10..6d58c26c49b 100644
--- a/dsl/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/AbstractEndpointBuilder.java
+++ b/dsl/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/AbstractEndpointBuilder.java
@@ -64,8 +64,8 @@ public class AbstractEndpointBuilder {
         Map<String, Object> remaining = new LinkedHashMap<>();
         // we should not bind complex objects to registry as we create the endpoint via the properties as-is
         NormalizedEndpointUri uri = computeUri(remaining, context, false, true);
-        ExtendedCamelContext ecc = (ExtendedCamelContext) context;
-        Endpoint endpoint = ecc.getEndpoint(uri, properties);
+        CamelContext ecc = context;
+        Endpoint endpoint = ecc.getCamelContextExtension().getEndpoint(uri, properties);
         if (endpoint == null) {
             throw new NoSuchEndpointException(uri.getUri());
         }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java
index 777b337c61a..44ea49c593a 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java
@@ -76,7 +76,7 @@ public class DependencyDownloaderRoutesLoader extends DefaultRoutesLoader {
         if (loader == null) {
             // need to use regular factory finder as bootstrap has already marked the loader as a miss
             final CamelContext ecc = getCamelContext();
-            final FactoryFinder finder = ((ExtendedCamelContext) ecc).getFactoryFinder(RoutesBuilderLoader.FACTORY_PATH);
+            final FactoryFinder finder = ecc.getCamelContextExtension().getFactoryFinder(RoutesBuilderLoader.FACTORY_PATH);
             loader = ResolverHelper.resolveService(ecc, finder, extension, RoutesBuilderLoader.class).orElse(null);
             if (loader != null) {
                 CamelContextAware.trySetCamelContext(loader, getCamelContext());
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java
index eb8dc0e8ddb..74c838217ca 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java
@@ -76,7 +76,7 @@ public final class YamlSupport {
 
         if (configurer == null) {
             // see if there is a configurer for it
-            configurer = ((ExtendedCamelContext) context).getConfigurerResolver()
+            configurer = context.getCamelContextExtension().getConfigurerResolver()
                     .resolvePropertyConfigurer(target.getClass().getSimpleName(), context);
         }
 
@@ -149,7 +149,7 @@ public final class YamlSupport {
         }
 
         final String scheme = uri.contains(":") ? StringHelper.before(uri, ":") : uri;
-        final EndpointUriFactory factory = ((ExtendedCamelContext) context).getEndpointUriFactory(scheme);
+        final EndpointUriFactory factory = context.getCamelContextExtension().getEndpointUriFactory(scheme);
 
         try {
             if (factory != null && factory.isEnabled(scheme)) {
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerBuilderDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerBuilderDeserializer.java
index aa6391f504f..4d56f153cc3 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerBuilderDeserializer.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerBuilderDeserializer.java
@@ -68,7 +68,7 @@ public class ErrorHandlerBuilderDeserializer implements ConstructNode {
         return new CamelContextCustomizer() {
             @Override
             public void configure(CamelContext camelContext) {
-                ((ExtendedCamelContext) camelContext).setErrorHandlerFactory(builder);
+                camelContext.getCamelContextExtension().setErrorHandlerFactory(builder);
             }
         };
     }