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/04/02 19:43:48 UTC

[camel] branch main updated (573a3b60aff -> e0ee0d34645)

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

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


    from 573a3b60aff Regen SBOM from commit 5072336e6b8bc4f75dabd184a83337431d61523f
     new 59be6210306 CAMEL-15105: make the UnitOfWorkFactory a plugin of the context
     new 9dd934cd477 CAMEL-15105: make the BeanIntrospection a plugin of the context
     new 5db6d42809b CAMEL-15105: make the ResourceLoader a plugin of the context
     new e0ee0d34645 CAMEL-15105: do register the BeanIntrospection as a plugin of the context

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


Summary of changes:
 .../camel/component/cron/CronPatternsTest.java     |  3 +-
 .../component/facebook/FacebookComponent.java      |  3 +-
 .../facebook/data/FacebookPropertiesHelper.java    |  3 +-
 .../camel/component/fhir/FhirConfigurationIT.java  |  3 +-
 .../google/calendar/GoogleCalendarConsumer.java    |  3 +-
 .../google/calendar/GoogleCalendarProducer.java    |  3 +-
 .../google/drive/GoogleDriveConsumer.java          |  3 +-
 .../google/drive/GoogleDriveProducer.java          |  3 +-
 .../component/google/mail/GoogleMailConsumer.java  |  3 +-
 .../component/google/mail/GoogleMailProducer.java  |  3 +-
 .../google/sheets/GoogleSheetsConsumer.java        |  3 +-
 .../google/sheets/GoogleSheetsProducer.java        |  3 +-
 .../apache/camel/component/http/HttpComponent.java |  3 +-
 .../apache/camel/component/mail/MailConsumer.java  |  3 +-
 .../component/metrics/MetricsComponentTest.java    |  5 ++-
 .../faulttolerance/FaultToleranceProcessor.java    |  3 +-
 .../faulttolerance/FaultToleranceReifier.java      |  2 +-
 ...tToleranceRefConfigurationNoReflectionTest.java |  3 +-
 .../faulttolerance/FaultToleranceRouteOkTest.java  |  3 +-
 .../component/netty/http/NettyHttpComponent.java   |  3 +-
 .../camel/component/netty/NettyComponent.java      |  3 +-
 .../olingo4/Olingo4ComponentConsumerTest.java      | 11 +++--
 .../olingo4/Olingo4ComponentProducerTest.java      |  9 ++--
 .../openapi/jmx/JmxRestDefinitionsResolver.java    |  5 +--
 .../resilience4j/ResilienceProcessor.java          |  3 +-
 .../component/resilience4j/ResilienceReifier.java  |  2 +-
 .../resilience4j/ResiliencePooledRouteOkTest.java  |  3 +-
 .../resilience4j/ResilienceRouteOkTest.java        |  3 +-
 .../camel/github/GistResourceResolverTest.java     |  5 +--
 .../camel/github/GitHubResourceResolverTest.java   | 11 ++---
 .../camel/component/twilio/TwilioEndpoint.java     |  3 +-
 .../camel/component/twilio/TwilioEndpointTest.java | 13 +++---
 .../cloud/UndertowServiceCallRouteTest.java        | 10 +++--
 .../rest/RestUndertowProducerGetPojoTest.java      |  3 +-
 .../component/wordpress/WordpressComponent.java    |  3 +-
 .../org/apache/camel/ExtendedCamelContext.java     | 30 -------------
 .../apache/camel/support/jsse/JsseParameters.java  |  2 +-
 .../camel/impl/engine/AbstractCamelContext.java    | 20 ++-------
 .../camel/impl/engine/CamelInternalProcessor.java  |  8 ++--
 .../impl/engine/CamelPostProcessorHelper.java      |  4 +-
 .../impl/engine/DefaultCamelContextExtension.java  | 51 ----------------------
 .../engine/DefaultPackageScanResourceResolver.java | 14 +++---
 .../apache/camel/converter/ResourceConverter.java  |  6 +--
 .../apache/camel/impl/console/ConsoleHelper.java   |  7 ++-
 .../camel/impl/console/SourceDevConsole.java       |  4 +-
 .../apache/camel/impl/console/TopDevConsole.java   |  7 ++-
 .../camel/impl/ExtendedCamelContextConfigurer.java | 18 --------
 .../impl/lw/LightweightCamelContextExtension.java  | 30 -------------
 .../model/cloud/ServiceCallConfiguration.java      |  2 +-
 .../camel/reifier/rest/RestBindingReifier.java     | 10 +++--
 .../core/xml/AbstractCamelContextFactoryBean.java  |  2 +-
 .../component/log/LogComponentOptionsTest.java     | 21 ++++-----
 .../org/apache/camel/converter/ConverterTest.java  |  3 +-
 .../camel/impl/CustomUnitOfWorkFactoryTest.java    |  2 +-
 .../apache/camel/model/ModelSanityCheckerTest.java |  3 +-
 .../PropertyBindingSupportConfigurerTest.java      |  6 +--
 .../org/apache/camel/util/ResourceLoaderTest.java  | 38 ++++++++--------
 .../camel/main/DefaultConfigurationConfigurer.java | 10 +++--
 .../PropertyBindingSupportOptionalValueTest.java   |  3 +-
 ...pertyBindingSupportRootArrayReflectionTest.java |  7 +--
 .../main/PropertyBindingSupportRootArrayTest.java  |  3 +-
 ...yBindingSupportRootArrayWithConfigurerTest.java |  7 +--
 .../management/ManagedBeanIntrospectionTest.java   |  3 +-
 .../org/apache/camel/support/DefaultConsumer.java  |  3 +-
 .../camel/support/EventDrivenPollingConsumer.java  |  3 +-
 .../support/FileWatcherResourceReloadStrategy.java |  4 +-
 .../org/apache/camel/support/PluginHelper.java     | 45 +++++++++++++++++++
 .../camel/support/PropertyBindingSupport.java      | 11 ++---
 .../org/apache/camel/support/ResourceHelper.java   |  4 +-
 .../apache/camel/support/RouteTemplateHelper.java  | 10 ++---
 .../support/component/AbstractApiComponent.java    |  2 +-
 .../component/ApiMethodPropertiesHelper.java       |  4 +-
 .../support/management/MBeanInfoAssembler.java     |  5 +--
 .../groovy/common/model/BeanConfiguration.groovy   |  4 +-
 .../dsl/groovy/GroovyRouteBuilderLoaderTest.groovy |  2 +-
 .../dsl/java/joor/JavaRoutesBuilderLoaderTest.java |  8 ++--
 .../dsl/js/JavaScriptRoutesBuilderLoaderTest.java  | 14 +++---
 .../apache/camel/dsl/jsh/JshSourceLoaderTest.java  |  2 +-
 .../java/org/apache/camel/main/KameletMain.java    |  3 +-
 .../dsl/kotlin/KotlinRoutesBuilderLoaderTest.kt    | 18 ++++----
 .../apache/camel/dsl/xml/io/XmlLoadRestTest.java   |  4 +-
 .../org/apache/camel/dsl/xml/io/XmlLoadTest.java   | 11 ++---
 .../xml/jaxb/definition/LoadRestFromXmlTest.java   |  6 +--
 .../xml/jaxb/definition/LoadRouteFromXmlTest.java  |  6 +--
 .../LoadRouteFromXmlWithInterceptTest.java         |  6 +--
 .../LoadRouteFromXmlWithNamespaceTest.java         |  6 +--
 .../LoadRouteFromXmlWithOnExceptionTest.java       |  6 +--
 .../definition/LoadRouteFromXmlWithPolicyTest.java |  6 +--
 .../definition/RouteTemplateLoadFromXmlTest.java   | 13 +++---
 .../jaxb/spring/CamelLoadRoutesFromXMLTest.java    |  4 +-
 .../camel/dsl/xml/jaxb/JaxbXmlLoadRestTest.java    |  4 +-
 .../apache/camel/dsl/xml/jaxb/JaxbXmlLoadTest.java |  6 +--
 .../apache/camel/dsl/yaml/LineNumberTest.groovy    |  5 ++-
 .../org/apache/camel/dsl/yaml/RestTest.groovy      |  7 +--
 .../camel/dsl/yaml/support/YamlTestSupport.groovy  |  1 +
 95 files changed, 307 insertions(+), 395 deletions(-)


[camel] 03/04: CAMEL-15105: make the ResourceLoader a plugin of the context

Posted by or...@apache.org.
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 5db6d42809bde48f391c47735668646708b7abb0
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Sun Apr 2 11:26:15 2023 +0200

    CAMEL-15105: make the ResourceLoader a plugin of the context
---
 .../openapi/jmx/JmxRestDefinitionsResolver.java    |  5 ++-
 .../camel/github/GistResourceResolverTest.java     |  5 ++-
 .../camel/github/GitHubResourceResolverTest.java   | 11 +++----
 .../org/apache/camel/ExtendedCamelContext.java     | 10 ------
 .../apache/camel/support/jsse/JsseParameters.java  |  2 +-
 .../camel/impl/engine/AbstractCamelContext.java    |  9 +----
 .../impl/engine/DefaultCamelContextExtension.java  | 17 ----------
 .../engine/DefaultPackageScanResourceResolver.java | 14 +++-----
 .../apache/camel/converter/ResourceConverter.java  |  6 ++--
 .../apache/camel/impl/console/ConsoleHelper.java   |  7 ++--
 .../camel/impl/console/SourceDevConsole.java       |  4 +--
 .../apache/camel/impl/console/TopDevConsole.java   |  7 ++--
 .../camel/impl/ExtendedCamelContextConfigurer.java |  6 ----
 .../impl/lw/LightweightCamelContextExtension.java  | 10 ------
 .../org/apache/camel/util/ResourceLoaderTest.java  | 38 ++++++++++++----------
 .../support/FileWatcherResourceReloadStrategy.java |  4 +--
 .../org/apache/camel/support/PluginHelper.java     | 15 +++++++++
 .../org/apache/camel/support/ResourceHelper.java   |  4 +--
 .../apache/camel/support/RouteTemplateHelper.java  | 10 +++---
 .../dsl/groovy/GroovyRouteBuilderLoaderTest.groovy |  2 +-
 .../dsl/java/joor/JavaRoutesBuilderLoaderTest.java |  8 ++---
 .../dsl/js/JavaScriptRoutesBuilderLoaderTest.java  | 14 ++++----
 .../apache/camel/dsl/jsh/JshSourceLoaderTest.java  |  2 +-
 .../java/org/apache/camel/main/KameletMain.java    |  3 +-
 .../dsl/kotlin/KotlinRoutesBuilderLoaderTest.kt    | 18 +++++-----
 .../apache/camel/dsl/xml/io/XmlLoadRestTest.java   |  4 +--
 .../org/apache/camel/dsl/xml/io/XmlLoadTest.java   | 11 +++----
 .../xml/jaxb/definition/LoadRestFromXmlTest.java   |  6 ++--
 .../xml/jaxb/definition/LoadRouteFromXmlTest.java  |  6 ++--
 .../LoadRouteFromXmlWithInterceptTest.java         |  6 ++--
 .../LoadRouteFromXmlWithNamespaceTest.java         |  6 ++--
 .../LoadRouteFromXmlWithOnExceptionTest.java       |  6 ++--
 .../definition/LoadRouteFromXmlWithPolicyTest.java |  6 ++--
 .../definition/RouteTemplateLoadFromXmlTest.java   | 13 +++-----
 .../jaxb/spring/CamelLoadRoutesFromXMLTest.java    |  4 +--
 .../camel/dsl/xml/jaxb/JaxbXmlLoadRestTest.java    |  4 +--
 .../apache/camel/dsl/xml/jaxb/JaxbXmlLoadTest.java |  6 ++--
 .../apache/camel/dsl/yaml/LineNumberTest.groovy    |  5 +--
 .../org/apache/camel/dsl/yaml/RestTest.groovy      |  7 ++--
 .../camel/dsl/yaml/support/YamlTestSupport.groovy  |  1 +
 40 files changed, 127 insertions(+), 195 deletions(-)

diff --git a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/jmx/JmxRestDefinitionsResolver.java b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/jmx/JmxRestDefinitionsResolver.java
index 6d446b9822a..271575153a9 100644
--- a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/jmx/JmxRestDefinitionsResolver.java
+++ b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/jmx/JmxRestDefinitionsResolver.java
@@ -25,13 +25,13 @@ import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.openapi.RestDefinitionsResolver;
 import org.apache.camel.openapi.RestOpenApiSupport;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.annotations.JdkService;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.xml.in.ModelParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -68,8 +68,7 @@ public class JmxRestDefinitionsResolver implements RestDefinitionsResolver {
             if (xml != null) {
                 LOG.debug("DumpRestAsXml:\n{}", xml);
 
-                ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
-                Resource resource = ecc.getResourceLoader().resolveResource("mem:" + xml);
+                Resource resource = PluginHelper.getResourceLoader(camelContext).resolveResource("mem:" + xml);
                 RestsDefinition rests = new ModelParser(resource).parseRestsDefinition().orElse(null);
                 if (rests != null) {
                     return rests.getRests();
diff --git a/components/camel-resourceresolver-github/src/test/java/org/apache/camel/github/GistResourceResolverTest.java b/components/camel-resourceresolver-github/src/test/java/org/apache/camel/github/GistResourceResolverTest.java
index 8cf2263fe64..ca51fbab98f 100644
--- a/components/camel-resourceresolver-github/src/test/java/org/apache/camel/github/GistResourceResolverTest.java
+++ b/components/camel-resourceresolver-github/src/test/java/org/apache/camel/github/GistResourceResolverTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.camel.github;
 
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.Resource;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
@@ -29,8 +29,7 @@ public class GistResourceResolverTest extends CamelTestSupport {
 
     @Test
     public void testGist() throws Exception {
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
-        Resource res = ecc.getResourceLoader().resolveResource("gist:davsclaus:123:456:beer.xml");
+        Resource res = PluginHelper.getResourceLoader(context).resolveResource("gist:davsclaus:123:456:beer.xml");
         assertNotNull(res);
         assertFalse(res.exists());
         assertEquals("https://gist.githubusercontent.com/davsclaus/123/raw/456/beer.xml", res.getLocation());
diff --git a/components/camel-resourceresolver-github/src/test/java/org/apache/camel/github/GitHubResourceResolverTest.java b/components/camel-resourceresolver-github/src/test/java/org/apache/camel/github/GitHubResourceResolverTest.java
index 43453d1c917..82123f887b5 100644
--- a/components/camel-resourceresolver-github/src/test/java/org/apache/camel/github/GitHubResourceResolverTest.java
+++ b/components/camel-resourceresolver-github/src/test/java/org/apache/camel/github/GitHubResourceResolverTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.camel.github;
 
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.Resource;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
@@ -29,8 +29,7 @@ public class GitHubResourceResolverTest extends CamelTestSupport {
 
     @Test
     public void testGitHubLoadPom() throws Exception {
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
-        Resource res = ecc.getResourceLoader().resolveResource("github:apache:camel:main:core/pom.xml");
+        Resource res = PluginHelper.getResourceLoader(context).resolveResource("github:apache:camel:main:core/pom.xml");
         assertNotNull(res);
         assertTrue(res.exists());
 
@@ -41,8 +40,7 @@ public class GitHubResourceResolverTest extends CamelTestSupport {
 
     @Test
     public void testGitHubLoadMainDefault() throws Exception {
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
-        Resource res = ecc.getResourceLoader().resolveResource("github:apache:camel:core/pom.xml");
+        Resource res = PluginHelper.getResourceLoader(context).resolveResource("github:apache:camel:core/pom.xml");
         assertNotNull(res);
         assertTrue(res.exists());
 
@@ -53,8 +51,7 @@ public class GitHubResourceResolverTest extends CamelTestSupport {
 
     @Test
     public void testGitHubDoesNotExist() {
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
-        Resource res = ecc.getResourceLoader().resolveResource("github:apache:camel:main:core/unknown.xml");
+        Resource res = PluginHelper.getResourceLoader(context).resolveResource("github:apache:camel:main:core/unknown.xml");
         assertNotNull(res);
         assertFalse(res.exists());
     }
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
index e7c09eab5bb..849a92341a2 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -402,16 +402,6 @@ public interface ExtendedCamelContext {
      */
     void setEventNotificationApplicable(boolean eventNotificationApplicable);
 
-    /**
-     * Gets the {@link ResourceLoader} to be used.
-     */
-    ResourceLoader getResourceLoader();
-
-    /**
-     * Sets a custom {@link ResourceLoader} to be used.
-     */
-    void setResourceLoader(ResourceLoader resourceLoader);
-
     /**
      * Gets the {@link ModelToXMLDumper} to be used.
      */
diff --git a/core/camel-api/src/main/java/org/apache/camel/support/jsse/JsseParameters.java b/core/camel-api/src/main/java/org/apache/camel/support/jsse/JsseParameters.java
index 081e6833a2a..47d826a589c 100644
--- a/core/camel-api/src/main/java/org/apache/camel/support/jsse/JsseParameters.java
+++ b/core/camel-api/src/main/java/org/apache/camel/support/jsse/JsseParameters.java
@@ -114,7 +114,7 @@ public class JsseParameters implements CamelContextAware {
     protected InputStream resolveResource(String resource) throws IOException {
         ObjectHelper.notNull(getCamelContext(), "CamelContext", this);
 
-        Resource res = getCamelContext().getCamelContextExtension().getResourceLoader().resolveResource(resource);
+        Resource res = getCamelContext().getCamelContextExtension().getContextPlugin(ResourceLoader.class).resolveResource(resource);
         if (res == null) {
             throw new IOException("Could not open " + resource + " as a file, class path resource, or URL.");
         }
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index aa511feb1c2..00db12e9ca2 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -381,6 +381,7 @@ public abstract class AbstractCamelContext extends BaseService
                 this::createRestBindingJaxbDataFormatFactory);
         camelContextExtension.lazyAddContextPlugin(BeanProxyFactory.class, this::createBeanProxyFactory);
         camelContextExtension.lazyAddContextPlugin(UnitOfWorkFactory.class, this::createUnitOfWorkFactory);
+        camelContextExtension.lazyAddContextPlugin(ResourceLoader.class, this::createResourceLoader);
 
         if (build) {
             try {
@@ -4175,14 +4176,6 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.setReactiveExecutor(reactiveExecutor);
     }
 
-    public ResourceLoader getResourceLoader() {
-        return camelContextExtension.getResourceLoader();
-    }
-
-    public void setResourceLoader(ResourceLoader resourceLoader) {
-        camelContextExtension.setResourceLoader(resourceLoader);
-    }
-
     public ModelToXMLDumper getModelToXMLDumper() {
         return camelContextExtension.getModelToXMLDumper();
     }
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
index 40ce95e0959..73aa212417b 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
@@ -416,23 +416,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
         camelContext.headersMapFactory = camelContext.getInternalServiceManager().addService(headersMapFactory);
     }
 
-    @Override
-    public ResourceLoader getResourceLoader() {
-        if (camelContext.resourceLoader == null) {
-            synchronized (camelContext.lock) {
-                if (camelContext.resourceLoader == null) {
-                    setResourceLoader(camelContext.createResourceLoader());
-                }
-            }
-        }
-        return camelContext.resourceLoader;
-    }
-
-    @Override
-    public void setResourceLoader(ResourceLoader resourceLoader) {
-        camelContext.resourceLoader = camelContext.getInternalServiceManager().addService(resourceLoader);
-    }
-
     public ModelToXMLDumper getModelToXMLDumper() {
         if (camelContext.modelToXMLDumper == null) {
             synchronized (camelContext.lock) {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java
index fba4718abc0..679bdf72ebb 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java
@@ -37,11 +37,11 @@ import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 
 import org.apache.camel.CamelContextAware;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.NonManagedService;
 import org.apache.camel.spi.PackageScanResourceResolver;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.ResourceLoader;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.util.AntPathMatcher;
 import org.apache.camel.util.IOHelper;
@@ -83,8 +83,7 @@ public class DefaultPackageScanResourceResolver extends BasePackageScanResolver
                 findInClasspath(root, resources, subPattern);
             }
         } else {
-            final ExtendedCamelContext ecc = getCamelContext().getCamelContextExtension();
-            final ResourceLoader loader = ecc.getResourceLoader();
+            final ResourceLoader loader = PluginHelper.getResourceLoader(getCamelContext());
 
             // its a single resource so load it directly
             resources.add(loader.resolveResource(location));
@@ -97,8 +96,7 @@ public class DefaultPackageScanResourceResolver extends BasePackageScanResolver
             String subPattern)
             throws Exception {
 
-        final ExtendedCamelContext ecc = getCamelContext().getCamelContextExtension();
-        final ResourceLoader loader = ecc.getResourceLoader();
+        final ResourceLoader loader = PluginHelper.getResourceLoader(getCamelContext());
 
         for (Path path : ResourceHelper.findInFileSystem(dir.toPath(), subPattern)) {
             resources.add(loader.resolveResource("file:" + path.toString()));
@@ -245,8 +243,7 @@ public class DefaultPackageScanResourceResolver extends BasePackageScanResolver
             boolean match = PATH_MATCHER.match(subPattern, shortName);
             log.debug("Found resource: {} matching pattern: {} -> {}", shortName, subPattern, match);
             if (match) {
-                final ExtendedCamelContext ecc = getCamelContext().getCamelContextExtension();
-                final ResourceLoader loader = ecc.getResourceLoader();
+                final ResourceLoader loader = PluginHelper.getResourceLoader(getCamelContext());
 
                 resources.add(loader.resolveResource(name));
             }
@@ -322,8 +319,7 @@ public class DefaultPackageScanResourceResolver extends BasePackageScanResolver
                 boolean match = PATH_MATCHER.match(subPattern, name);
                 log.debug("Found resource: {} matching pattern: {} -> {}", name, subPattern, match);
                 if (match) {
-                    final ExtendedCamelContext ecc = getCamelContext().getCamelContextExtension();
-                    final ResourceLoader loader = ecc.getResourceLoader();
+                    final ResourceLoader loader = PluginHelper.getResourceLoader(getCamelContext());
 
                     resources.add(loader.resolveResource("file:" + file.getPath()));
                 }
diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/ResourceConverter.java b/core/camel-base/src/main/java/org/apache/camel/converter/ResourceConverter.java
index 07279102318..8a85783dd28 100644
--- a/core/camel-base/src/main/java/org/apache/camel/converter/ResourceConverter.java
+++ b/core/camel-base/src/main/java/org/apache/camel/converter/ResourceConverter.java
@@ -24,6 +24,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Converter;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.Resource;
+import org.apache.camel.support.PluginHelper;
 
 @Converter(generateBulkLoader = true)
 public final class ResourceConverter {
@@ -57,9 +58,8 @@ public final class ResourceConverter {
     }
 
     @Converter(order = 5)
-    public static Resource toResource(String uri, CamelContext camelContext) throws IOException {
-        ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
-        return ecc.getResourceLoader().resolveResource(uri);
+    public static Resource toResource(String uri, CamelContext camelContext) {
+        return PluginHelper.getResourceLoader(camelContext).resolveResource(uri);
     }
 
 }
diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/ConsoleHelper.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/ConsoleHelper.java
index d6113316d09..7e1ece0378f 100644
--- a/core/camel-console/src/main/java/org/apache/camel/impl/console/ConsoleHelper.java
+++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/ConsoleHelper.java
@@ -23,6 +23,7 @@ import java.util.List;
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.support.LoggerHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.json.JsonObject;
 import org.apache.camel.util.json.Jsoner;
@@ -42,8 +43,7 @@ public final class ConsoleHelper {
         List<JsonObject> code = new ArrayList<>();
         try {
             location = LoggerHelper.stripSourceLocationLineNumber(location);
-            Resource resource = camelContext.getCamelContextExtension().getResourceLoader()
-                    .resolveResource(location);
+            Resource resource = PluginHelper.getResourceLoader(camelContext).resolveResource(location);
             if (resource != null) {
                 LineNumberReader reader = new LineNumberReader(resource.getReader());
                 int i = 0;
@@ -77,8 +77,7 @@ public final class ConsoleHelper {
 
         try {
             location = LoggerHelper.stripSourceLocationLineNumber(location);
-            Resource resource = camelContext.getCamelContextExtension().getResourceLoader()
-                    .resolveResource(location);
+            Resource resource = PluginHelper.getResourceLoader(camelContext).resolveResource(location);
             if (resource != null) {
                 LineNumberReader reader = new LineNumberReader(resource.getReader());
                 int i = 0;
diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/SourceDevConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/SourceDevConsole.java
index 73811ce2845..079a6ccf4a6 100644
--- a/core/camel-console/src/main/java/org/apache/camel/impl/console/SourceDevConsole.java
+++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/SourceDevConsole.java
@@ -30,6 +30,7 @@ import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.annotations.DevConsole;
 import org.apache.camel.support.LoggerHelper;
 import org.apache.camel.support.PatternHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.console.AbstractDevConsole;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.StringHelper;
@@ -61,8 +62,7 @@ public class SourceDevConsole extends AbstractDevConsole {
                 loc = LoggerHelper.stripSourceLocationLineNumber(loc);
                 StringBuilder code = new StringBuilder();
                 try {
-                    Resource resource = getCamelContext().getCamelContextExtension().getResourceLoader()
-                            .resolveResource(loc);
+                    Resource resource = PluginHelper.getResourceLoader(getCamelContext()).resolveResource(loc);
                     if (resource != null) {
                         if (sb.length() > 0) {
                             sb.append("\n");
diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/TopDevConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/TopDevConsole.java
index 9663f6b13d3..dc38fd77d30 100644
--- a/core/camel-console/src/main/java/org/apache/camel/impl/console/TopDevConsole.java
+++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/TopDevConsole.java
@@ -33,6 +33,7 @@ import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.annotations.DevConsole;
 import org.apache.camel.support.LoggerHelper;
 import org.apache.camel.support.PatternHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.console.AbstractDevConsole;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.StringHelper;
@@ -107,8 +108,7 @@ public class TopDevConsole extends AbstractDevConsole {
                         int line = mpb.getSourceLineNumber();
                         try {
                             loc = LoggerHelper.stripSourceLocationLineNumber(loc);
-                            Resource resource = getCamelContext().getCamelContextExtension().getResourceLoader()
-                                    .resolveResource(loc);
+                            Resource resource = PluginHelper.getResourceLoader(getCamelContext()).resolveResource(loc);
                             if (resource != null) {
                                 LineNumberReader reader = new LineNumberReader(resource.getReader());
                                 for (int i = 1; i < line + 3; i++) {
@@ -210,8 +210,7 @@ public class TopDevConsole extends AbstractDevConsole {
                         int line = mpb.getSourceLineNumber();
                         try {
                             loc = LoggerHelper.stripSourceLocationLineNumber(loc);
-                            Resource resource = getCamelContext().getCamelContextExtension().getResourceLoader()
-                                    .resolveResource(loc);
+                            Resource resource = PluginHelper.getResourceLoader(getCamelContext()).resolveResource(loc);
                             if (resource != null) {
                                 LineNumberReader reader = new LineNumberReader(resource.getReader());
                                 for (int i = 1; i < line + 3; i++) {
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 8d662d241b9..8c542c09014 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -53,8 +53,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ReactiveExecutor": target.setReactiveExecutor(property(camelContext, org.apache.camel.spi.ReactiveExecutor.class, value)); return true;
         case "registry":
         case "Registry": target.setRegistry(property(camelContext, org.apache.camel.spi.Registry.class, value)); return true;
-        case "resourceloader":
-        case "ResourceLoader": target.setResourceLoader(property(camelContext, org.apache.camel.spi.ResourceLoader.class, value)); return true;
         case "startupsteprecorder":
         case "StartupStepRecorder": target.setStartupStepRecorder(property(camelContext, org.apache.camel.spi.StartupStepRecorder.class, value)); return true;
         default: return false;
@@ -96,8 +94,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ReactiveExecutor": return org.apache.camel.spi.ReactiveExecutor.class;
         case "registry":
         case "Registry": return org.apache.camel.spi.Registry.class;
-        case "resourceloader":
-        case "ResourceLoader": return org.apache.camel.spi.ResourceLoader.class;
         case "startupsteprecorder":
         case "StartupStepRecorder": return org.apache.camel.spi.StartupStepRecorder.class;
         default: return null;
@@ -140,8 +136,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ReactiveExecutor": return target.getReactiveExecutor();
         case "registry":
         case "Registry": return target.getRegistry();
-        case "resourceloader":
-        case "ResourceLoader": return target.getResourceLoader();
         case "startupsteprecorder":
         case "StartupStepRecorder": return target.getStartupStepRecorder();
         default: return null;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
index de6e3e6ec07..837da2e48fe 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
@@ -380,16 +380,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public ResourceLoader getResourceLoader() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setResourceLoader(ResourceLoader resourceLoader) {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public void registerEndpointCallback(EndpointStrategy strategy) {
         throw new UnsupportedOperationException();
diff --git a/core/camel-core/src/test/java/org/apache/camel/util/ResourceLoaderTest.java b/core/camel-core/src/test/java/org/apache/camel/util/ResourceLoaderTest.java
index cffb1ae2dc1..9968ac80ca7 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/ResourceLoaderTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/util/ResourceLoaderTest.java
@@ -30,6 +30,8 @@ import org.apache.camel.TestSupport;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.engine.DefaultResourceLoader;
 import org.apache.camel.spi.Resource;
+import org.apache.camel.spi.ResourceLoader;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.support.ResourceResolverSupport;
 import org.junit.jupiter.api.Test;
@@ -46,7 +48,7 @@ public class ResourceLoaderTest extends TestSupport {
     @Test
     public void testLoadFile() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext();
-        Resource resource = context.getResourceLoader().resolveResource("file:src/test/resources/log4j2.properties");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("file:src/test/resources/log4j2.properties");
 
         try (InputStream is = resource.getInputStream()) {
             assertNotNull(is);
@@ -63,7 +65,7 @@ public class ResourceLoaderTest extends TestSupport {
         copyFile(new File("src/test/resources/log4j2.properties"), new File("target/data/my space/log4j2.properties"));
 
         DefaultCamelContext context = new DefaultCamelContext();
-        Resource resource = context.getResourceLoader().resolveResource("file:target/data/my%20space/log4j2.properties");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("file:target/data/my%20space/log4j2.properties");
 
         try (InputStream is = resource.getInputStream()) {
             assertNotNull(is);
@@ -77,7 +79,7 @@ public class ResourceLoaderTest extends TestSupport {
     @Test
     public void testLoadClasspath() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext();
-        Resource resource = context.getResourceLoader().resolveResource("classpath:log4j2.properties");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("classpath:log4j2.properties");
 
         try (InputStream is = resource.getInputStream()) {
             assertNotNull(is);
@@ -91,7 +93,7 @@ public class ResourceLoaderTest extends TestSupport {
     @Test
     public void testLoadClasspathDefault() throws Exception {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader().resolveResource("log4j2.properties");
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource("log4j2.properties");
 
             // need to be started as it triggers the fallback
             // resolver
@@ -123,9 +125,9 @@ public class ResourceLoaderTest extends TestSupport {
                 }
             });
 
-            context.setResourceLoader(loader);
+            context.getCamelContextExtension().addContextPlugin(ResourceLoader.class, loader);
 
-            Resource resource = context.getResourceLoader().resolveResource("log4j2.properties");
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource("log4j2.properties");
 
             // need to be started as it triggers the fallback
             // resolver
@@ -146,7 +148,7 @@ public class ResourceLoaderTest extends TestSupport {
         DefaultCamelContext context = new DefaultCamelContext();
         context.getCamelContextExtension().getRegistry().bind("myBean", "This is a log4j logging configuration file");
 
-        Resource resource = context.getResourceLoader().resolveResource("ref:myBean");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("ref:myBean");
 
         try (InputStream is = resource.getInputStream()) {
             assertNotNull(is);
@@ -163,7 +165,7 @@ public class ResourceLoaderTest extends TestSupport {
         context.getCamelContextExtension().getRegistry().bind("myBean",
                 new AtomicReference<InputStream>(new ByteArrayInputStream("a".getBytes())));
 
-        Resource resource = context.getResourceLoader().resolveResource("bean:myBean::get");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("bean:myBean::get");
 
         try (InputStream is = resource.getInputStream()) {
             assertNotNull(is);
@@ -180,7 +182,7 @@ public class ResourceLoaderTest extends TestSupport {
         context.getCamelContextExtension().getRegistry().bind("my.company.MyClass",
                 new AtomicReference<InputStream>(new ByteArrayInputStream("a".getBytes())));
 
-        Resource resource = context.getResourceLoader().resolveResource("bean:my.company.MyClass::get");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("bean:my.company.MyClass::get");
 
         try (InputStream is = resource.getInputStream()) {
             assertNotNull(is);
@@ -197,7 +199,7 @@ public class ResourceLoaderTest extends TestSupport {
         context.getCamelContextExtension().getRegistry().bind("myBean",
                 new AtomicReference<InputStream>(new ByteArrayInputStream("a".getBytes())));
 
-        Resource resource = context.getResourceLoader().resolveResource("bean:myBean.get");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("bean:myBean.get");
 
         try (InputStream is = resource.getInputStream()) {
             assertNotNull(is);
@@ -211,7 +213,7 @@ public class ResourceLoaderTest extends TestSupport {
     @Test
     public void testLoadFileNotFound() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext();
-        Resource resource = context.getResourceLoader().resolveResource("file:src/test/resources/notfound.txt");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("file:src/test/resources/notfound.txt");
 
         assertFalse(resource.exists());
     }
@@ -219,7 +221,7 @@ public class ResourceLoaderTest extends TestSupport {
     @Test
     public void testLoadClasspathNotFound() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext();
-        Resource resource = context.getResourceLoader().resolveResource("classpath:notfound.txt");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("classpath:notfound.txt");
 
         assertFalse(resource.exists());
     }
@@ -227,7 +229,7 @@ public class ResourceLoaderTest extends TestSupport {
     @Test
     public void testLoadFileAsUrl() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext();
-        Resource resource = context.getResourceLoader().resolveResource("file:src/test/resources/log4j2.properties");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("file:src/test/resources/log4j2.properties");
 
         URL url = resource.getURI().toURL();
         assertNotNull(url);
@@ -242,7 +244,7 @@ public class ResourceLoaderTest extends TestSupport {
     @Test
     public void testLoadClasspathAsUrl() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext();
-        Resource resource = context.getResourceLoader().resolveResource("classpath:log4j2.properties");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("classpath:log4j2.properties");
 
         URL url = resource.getURI().toURL();
         assertNotNull(url);
@@ -259,7 +261,7 @@ public class ResourceLoaderTest extends TestSupport {
         final String raw = "to-be-encoded";
 
         DefaultCamelContext context = new DefaultCamelContext();
-        Resource resource = context.getResourceLoader().resolveResource("mem:" + raw);
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("mem:" + raw);
 
         try (InputStream is = resource.getInputStream()) {
             assertNotNull(is);
@@ -276,7 +278,7 @@ public class ResourceLoaderTest extends TestSupport {
         final String encoded = Base64.getEncoder().encodeToString(raw.getBytes(StandardCharsets.UTF_8));
 
         DefaultCamelContext context = new DefaultCamelContext();
-        Resource resource = context.getResourceLoader().resolveResource("base64:" + encoded);
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("base64:" + encoded);
 
         try (InputStream is = resource.getInputStream()) {
             assertNotNull(is);
@@ -294,7 +296,7 @@ public class ResourceLoaderTest extends TestSupport {
 
         DefaultCamelContext context = new DefaultCamelContext();
         context.getPropertiesComponent().setInitialProperties(propertiesOf("my.encoded", encoded));
-        Resource resource = context.getResourceLoader().resolveResource("base64:{{my.encoded}}");
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("base64:{{my.encoded}}");
 
         try (InputStream is = resource.getInputStream()) {
             assertNotNull(is);
@@ -319,7 +321,7 @@ public class ResourceLoaderTest extends TestSupport {
         }
 
         DefaultCamelContext context = new DefaultCamelContext();
-        Resource resource = context.getResourceLoader().resolveResource("gzip:" + encoded);
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("gzip:" + encoded);
 
         try (InputStream is = resource.getInputStream()) {
             assertNotNull(is);
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java b/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java
index f0a593638b8..b24c580ad95 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java
@@ -33,7 +33,6 @@ import java.util.Map;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedResource;
@@ -285,9 +284,8 @@ public class FileWatcherResourceReloadStrategy extends ResourceReloadStrategySup
                         if (accept) {
                             LOG.debug("Accepted Modified/Created file: {}", name);
                             try {
-                                ExtendedCamelContext ecc = getCamelContext().getCamelContextExtension();
                                 // must use file resource loader as we cannot load from classpath
-                                Resource resource = ecc.getResourceLoader().resolveResource("file:" + name);
+                                Resource resource = PluginHelper.getResourceLoader(getCamelContext()).resolveResource("file:" + name);
                                 getResourceReload().onReload(name, resource);
                                 incSucceededCounter();
                             } catch (Exception e) {
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
index fc00ee33481..ee3cc9c58fc 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
@@ -44,6 +44,7 @@ import org.apache.camel.spi.PackageScanResourceResolver;
 import org.apache.camel.spi.PeriodTaskResolver;
 import org.apache.camel.spi.PeriodTaskScheduler;
 import org.apache.camel.spi.ProcessorFactory;
+import org.apache.camel.spi.ResourceLoader;
 import org.apache.camel.spi.RestBindingJaxbDataFormatFactory;
 import org.apache.camel.spi.RouteFactory;
 import org.apache.camel.spi.RoutesLoader;
@@ -531,4 +532,18 @@ public final class PluginHelper {
     public static BeanIntrospection getBeanIntrospection(ExtendedCamelContext extendedCamelContext) {
         return extendedCamelContext.getContextPlugin(BeanIntrospection.class);
     }
+
+    /**
+     * Gets the {@link ResourceLoader} to be used.
+     */
+    public static ResourceLoader getResourceLoader(CamelContext camelContext) {
+        return getResourceLoader(camelContext.getCamelContextExtension());
+    }
+
+    /**
+     * Gets the {@link ResourceLoader} to be used.
+     */
+    public static ResourceLoader getResourceLoader(ExtendedCamelContext extendedCamelContext) {
+        return extendedCamelContext.getContextPlugin(ResourceLoader.class);
+    }
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ResourceHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/ResourceHelper.java
index 22c79a34f7a..f4d31630379 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/ResourceHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/ResourceHelper.java
@@ -37,7 +37,6 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.ResourceLoader;
 import org.apache.camel.util.AntPathMatcher;
@@ -192,8 +191,7 @@ public final class ResourceHelper {
      * @return              the {@link Resource}. Or <tt>null</tt> if not found
      */
     public static Resource resolveResource(CamelContext camelContext, String uri) {
-        final ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
-        final ResourceLoader loader = ecc.getResourceLoader();
+        final ResourceLoader loader = PluginHelper.getResourceLoader(camelContext);
         return loader.resolveResource(uri);
     }
 
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/RouteTemplateHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/RouteTemplateHelper.java
index 8980de0cb5e..2d9561f815a 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/RouteTemplateHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/RouteTemplateHelper.java
@@ -19,8 +19,8 @@ package org.apache.camel.support;
 import java.io.File;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.Resource;
+import org.apache.camel.spi.ResourceLoader;
 import org.apache.camel.spi.RouteTemplateLoaderListener;
 import org.apache.camel.util.FileUtil;
 import org.slf4j.Logger;
@@ -54,8 +54,8 @@ public final class RouteTemplateHelper {
             throw new IllegalArgumentException("Location is empty");
         }
 
-        ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
         boolean found = false;
+        final ResourceLoader resourceLoader = PluginHelper.getResourceLoader(camelContext);
         for (String path : location.split(",")) {
             // using dot as current dir must be expanded into absolute path
             if (".".equals(path) || "file:.".equals(path)) {
@@ -67,14 +67,14 @@ public final class RouteTemplateHelper {
             // first try resource as-is if the path has an extension
             String ext = FileUtil.onlyExt(path);
             if (ext != null && !ext.isEmpty()) {
-                res = ecc.getResourceLoader().resolveResource(name);
+                res = resourceLoader.resolveResource(name);
             }
             if (res == null || !res.exists()) {
                 if (!path.endsWith("/")) {
                     path += "/";
                 }
                 name = path + templateId + ".kamelet.yaml";
-                res = ecc.getResourceLoader().resolveResource(name);
+                res = resourceLoader.resolveResource(name);
             }
             if (res.exists()) {
                 try {
@@ -104,7 +104,7 @@ public final class RouteTemplateHelper {
             }
             String target = path + templateId + ".kamelet.yaml";
             PluginHelper.getRoutesLoader(camelContext).loadRoutes(
-                    ecc.getResourceLoader().resolveResource(target));
+                    resourceLoader.resolveResource(target));
         }
     }
 }
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy
index 30bd4a63d03..27eddc62a5f 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy
@@ -42,7 +42,7 @@ class GroovyRouteBuilderLoaderTest extends Specification {
     def context = new DefaultCamelContext()
 
     def loadRoute(String location) {
-        def route = context.getResourceLoader().resolveResource(location)
+        def route = PluginHelper.getResourceLoader(context).resolveResource(location)
         PluginHelper.getRoutesLoader(context).loadRoutes(route)
     }
 
diff --git a/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoaderTest.java b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoaderTest.java
index 0301a4bcb2d..c43cc526815 100644
--- a/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoaderTest.java
+++ b/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoaderTest.java
@@ -45,7 +45,7 @@ public class JavaRoutesBuilderLoaderTest {
     })
     void testLoadRoutes(String location) throws Exception {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader().resolveResource(location);
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource(location);
             Collection<RoutesBuilder> builders = PluginHelper.getRoutesLoader(context).findRoutesBuilders(resource);
 
             assertThat(builders).hasSize(1);
@@ -69,7 +69,7 @@ public class JavaRoutesBuilderLoaderTest {
         final String location = "/routes/MyRoutesWithNestedClass.java";
 
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader().resolveResource(location);
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource(location);
             Collection<RoutesBuilder> builders = PluginHelper.getRoutesLoader(context).findRoutesBuilders(resource);
 
             assertThat(builders).hasSize(1);
@@ -95,7 +95,7 @@ public class JavaRoutesBuilderLoaderTest {
         final String location = "/routes/MyRoutesWithRestConfiguration.java";
 
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader().resolveResource(location);
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource(location);
             Collection<RoutesBuilder> builders = PluginHelper.getRoutesLoader(context).findRoutesBuilders(resource);
 
             assertThat(builders).hasSize(1);
@@ -114,7 +114,7 @@ public class JavaRoutesBuilderLoaderTest {
         final String location = "/routes/MyRoutesWithModel.java";
 
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader().resolveResource(location);
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource(location);
             Collection<RoutesBuilder> builders = PluginHelper.getRoutesLoader(context).findRoutesBuilders(resource);
 
             assertThat(builders).hasSize(1);
diff --git a/dsl/camel-js-dsl/src/test/java/org/apache/camel/dsl/js/JavaScriptRoutesBuilderLoaderTest.java b/dsl/camel-js-dsl/src/test/java/org/apache/camel/dsl/js/JavaScriptRoutesBuilderLoaderTest.java
index 399247fa711..b742ed8036a 100644
--- a/dsl/camel-js-dsl/src/test/java/org/apache/camel/dsl/js/JavaScriptRoutesBuilderLoaderTest.java
+++ b/dsl/camel-js-dsl/src/test/java/org/apache/camel/dsl/js/JavaScriptRoutesBuilderLoaderTest.java
@@ -37,7 +37,7 @@ public class JavaScriptRoutesBuilderLoaderTest {
     })
     void routesCanBeLoaded(String location) throws Exception {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader().resolveResource(location);
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource(location);
             PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
             assertThat(context.getRouteDefinitions())
@@ -53,7 +53,7 @@ public class JavaScriptRoutesBuilderLoaderTest {
     @Test
     void componentsCanBeCustomized() throws Exception {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader()
+            Resource resource = PluginHelper.getResourceLoader(context)
                     .resolveResource("/routes/routes-with-component-configuration.js");
             PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
@@ -66,7 +66,7 @@ public class JavaScriptRoutesBuilderLoaderTest {
     @Test
     void contextCanBeCustomized() throws Exception {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader()
+            Resource resource = PluginHelper.getResourceLoader(context)
                     .resolveResource("/routes/routes-with-context-configuration.js");
             PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
@@ -77,7 +77,7 @@ public class JavaScriptRoutesBuilderLoaderTest {
     @Test
     void processorsCanBeCreated() throws Exception {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader().resolveResource("/routes/routes-with-processors.js");
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource("/routes/routes-with-processors.js");
             PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
             context.start();
@@ -94,7 +94,7 @@ public class JavaScriptRoutesBuilderLoaderTest {
     @Test
     void restCanBeConfigured() throws Exception {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader()
+            Resource resource = PluginHelper.getResourceLoader(context)
                     .resolveResource("/routes/routes-with-rest-configuration.js");
             PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
@@ -108,7 +108,7 @@ public class JavaScriptRoutesBuilderLoaderTest {
     @Test
     void restDslCanBeDefined() throws Exception {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader().resolveResource("/routes/routes-with-rest-dsl.js");
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource("/routes/routes-with-rest-dsl.js");
             PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
             assertThat(context.getRestDefinitions()).hasSize(1);
@@ -130,7 +130,7 @@ public class JavaScriptRoutesBuilderLoaderTest {
     @Test
     void modulesCanBeImported() throws Exception {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader().resolveResource("/routes/routes-with-modules.js");
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource("/routes/routes-with-modules.js");
             PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
             assertThat(context.getRouteDefinitions()).hasSize(1);
diff --git a/dsl/camel-jsh-dsl/src/test/java/org/apache/camel/dsl/jsh/JshSourceLoaderTest.java b/dsl/camel-jsh-dsl/src/test/java/org/apache/camel/dsl/jsh/JshSourceLoaderTest.java
index cedbfd06ae3..5f6d74bb94a 100644
--- a/dsl/camel-jsh-dsl/src/test/java/org/apache/camel/dsl/jsh/JshSourceLoaderTest.java
+++ b/dsl/camel-jsh-dsl/src/test/java/org/apache/camel/dsl/jsh/JshSourceLoaderTest.java
@@ -39,7 +39,7 @@ public class JshSourceLoaderTest {
     })
     void testLoadRoutes(String location) throws Exception {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
-            Resource resource = context.getResourceLoader().resolveResource(location);
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource(location);
             Collection<RoutesBuilder> builders = PluginHelper.getRoutesLoader(context).findRoutesBuilders(resource);
 
             assertThat(builders).hasSize(1);
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 5637a18894a..bc1afb09cb3 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -60,6 +60,7 @@ import org.apache.camel.spi.ComponentResolver;
 import org.apache.camel.spi.DataFormatResolver;
 import org.apache.camel.spi.LanguageResolver;
 import org.apache.camel.spi.Registry;
+import org.apache.camel.spi.ResourceLoader;
 import org.apache.camel.spi.RoutesLoader;
 import org.apache.camel.spi.UriFactoryResolver;
 import org.apache.camel.startup.jfr.FlightRecorderStartupStepRecorder;
@@ -455,7 +456,7 @@ public class KameletMain extends MainCommandLineSupport {
                     new DependencyDownloaderDataFormatResolver(answer));
             answer.getCamelContextExtension().addContextPlugin(LanguageResolver.class,
                     new DependencyDownloaderLanguageResolver(answer));
-            answer.setResourceLoader(new DependencyDownloaderResourceLoader(answer));
+            answer.getCamelContextExtension().addContextPlugin(ResourceLoader.class, new DependencyDownloaderResourceLoader(answer));
             answer.setInjector(new KameletMainInjector(answer.getInjector(), stub));
             answer.addService(new DependencyDownloaderKamelet(answer));
             answer.getCamelContextExtension().getRegistry().bind(DownloadModelineParser.class.getSimpleName(),
diff --git a/dsl/camel-kotlin-dsl/src/test/kotlin/org/apache/camel/dsl/kotlin/KotlinRoutesBuilderLoaderTest.kt b/dsl/camel-kotlin-dsl/src/test/kotlin/org/apache/camel/dsl/kotlin/KotlinRoutesBuilderLoaderTest.kt
index 908f87439b0..8f8fd433ed7 100644
--- a/dsl/camel-kotlin-dsl/src/test/kotlin/org/apache/camel/dsl/kotlin/KotlinRoutesBuilderLoaderTest.kt
+++ b/dsl/camel-kotlin-dsl/src/test/kotlin/org/apache/camel/dsl/kotlin/KotlinRoutesBuilderLoaderTest.kt
@@ -41,7 +41,7 @@ class KotlinRoutesBuilderLoaderTest {
     @Test
     fun `load routes`() {
         val ctx = DefaultCamelContext()
-        val res = ctx.resourceLoader.resolveResource("/routes/routes.kts")
+        val res = PluginHelper.getResourceLoader(ctx).resolveResource("/routes/routes.kts")
 
         PluginHelper.getRoutesLoader(ctx).loadRoutes(res)
 
@@ -56,7 +56,7 @@ class KotlinRoutesBuilderLoaderTest {
     @Test
     fun `load routes with endpoint dsl`() {
         val ctx = DefaultCamelContext()
-        val res = ctx.resourceLoader.resolveResource("/routes/routes-with-endpoint-dsl.kts")
+        val res = PluginHelper.getResourceLoader(ctx).resolveResource("/routes/routes-with-endpoint-dsl.kts")
 
         PluginHelper.getRoutesLoader(ctx).loadRoutes(res)
 
@@ -73,7 +73,7 @@ class KotlinRoutesBuilderLoaderTest {
     @Test
     fun `load integration with rest`() {
         val ctx = DefaultCamelContext()
-        val res = ctx.resourceLoader.resolveResource("/routes/routes-with-rest.kts")
+        val res = PluginHelper.getResourceLoader(ctx).resolveResource("/routes/routes-with-rest.kts")
 
         PluginHelper.getRoutesLoader(ctx).loadRoutes(res)
 
@@ -107,7 +107,7 @@ class KotlinRoutesBuilderLoaderTest {
     @Test
     fun `load integration with beans`() {
         val ctx = DefaultCamelContext()
-        val res = ctx.resourceLoader.resolveResource("/routes/routes-with-beans.kts")
+        val res = PluginHelper.getResourceLoader(ctx).resolveResource("/routes/routes-with-beans.kts")
 
         PluginHelper.getRoutesLoader(ctx).loadRoutes(res)
 
@@ -122,7 +122,7 @@ class KotlinRoutesBuilderLoaderTest {
     @Test
     fun `load integration with components configuration`() {
         val ctx = DefaultCamelContext()
-        val res = ctx.resourceLoader.resolveResource("/routes/routes-with-components-configuration.kts")
+        val res = PluginHelper.getResourceLoader(ctx).resolveResource("/routes/routes-with-components-configuration.kts")
 
         PluginHelper.getRoutesLoader(ctx).loadRoutes(res)
 
@@ -142,7 +142,7 @@ class KotlinRoutesBuilderLoaderTest {
         assertThatExceptionOfType(RuntimeCamelException::class.java)
                 .isThrownBy {
                     val ctx = DefaultCamelContext()
-                    val res = ctx.resourceLoader.resolveResource("/routes/routes-with-components-configuration-error.kts")
+                    val res = PluginHelper.getResourceLoader(ctx).resolveResource("/routes/routes-with-components-configuration-error.kts")
 
                     PluginHelper.getRoutesLoader(ctx).loadRoutes(res)
                 }
@@ -153,7 +153,7 @@ class KotlinRoutesBuilderLoaderTest {
     @Test
     fun `load integration with languages configuration`() {
         val ctx = DefaultCamelContext()
-        val res = ctx.resourceLoader.resolveResource("/routes/routes-with-languages-configuration.kts")
+        val res = PluginHelper.getResourceLoader(ctx).resolveResource("/routes/routes-with-languages-configuration.kts")
 
         PluginHelper.getRoutesLoader(ctx).loadRoutes(res)
 
@@ -169,7 +169,7 @@ class KotlinRoutesBuilderLoaderTest {
     @Test
     fun `load integration with dataformats configuration`() {
         val ctx = DefaultCamelContext()
-        val res = ctx.resourceLoader.resolveResource("/routes/routes-with-dataformats-configuration.kts")
+        val res = PluginHelper.getResourceLoader(ctx).resolveResource("/routes/routes-with-dataformats-configuration.kts")
 
         PluginHelper.getRoutesLoader(ctx).loadRoutes(res)
 
@@ -185,7 +185,7 @@ class KotlinRoutesBuilderLoaderTest {
     @Test
     fun `load integration with error handler`() {
         val ctx = DefaultCamelContext()
-        val res = ctx.resourceLoader.resolveResource("/routes/routes-with-error-handler.kts")
+        val res = PluginHelper.getResourceLoader(ctx).resolveResource("/routes/routes-with-error-handler.kts")
 
         PluginHelper.getRoutesLoader(ctx).loadRoutes(res)
         ctx.start()
diff --git a/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlLoadRestTest.java b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlLoadRestTest.java
index 6824fe5e213..ec652996eb0 100644
--- a/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlLoadRestTest.java
+++ b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlLoadRestTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dsl.xml.io;
 
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.rest.DummyRestConsumerFactory;
@@ -58,8 +57,7 @@ public class XmlLoadRestTest {
             foo.assertIsSatisfied();
 
             // load rest from XML and add them to the existing camel context
-            ExtendedCamelContext ecc = context.getCamelContextExtension();
-            Resource resource = ecc.getResourceLoader().resolveResource(
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource(
                     "/org/apache/camel/dsl/xml/io/barRest.xml");
 
             PluginHelper.getRoutesLoader(context).loadRoutes(resource);
diff --git a/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlLoadTest.java b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlLoadTest.java
index 7018100a19d..0fec6272c11 100644
--- a/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlLoadTest.java
+++ b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlLoadTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dsl.xml.io;
 
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
@@ -53,11 +52,10 @@ public class XmlLoadTest {
 
             // START SNIPPET: e1
             // load route from XML and add them to the existing camel context
-            ExtendedCamelContext ecc = context.getCamelContextExtension();
-            Resource resource = ecc.getResourceLoader().resolveResource(
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource(
                     "/org/apache/camel/dsl/xml/io/barRoute.xml");
 
-            PluginHelper.getRoutesLoader(ecc).loadRoutes(resource);
+            PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
             // END SNIPPET: e1
             assertNotNull(context.getRoute("bar"), "Loaded bar route should be there");
@@ -77,11 +75,10 @@ public class XmlLoadTest {
             context.start();
 
             // load route from XML and add them to the existing camel context
-            ExtendedCamelContext ecc = context.getCamelContextExtension();
-            Resource resource = ecc.getResourceLoader().resolveResource(
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource(
                     "/org/apache/camel/dsl/xml/io/bar2.xml");
 
-            PluginHelper.getRoutesLoader(ecc).loadRoutes(resource);
+            PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
             assertNotNull(context.getRoute("bar2"), "Loaded bar2 route should be there");
             assertEquals(1, context.getRoutes().size());
diff --git a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRestFromXmlTest.java b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRestFromXmlTest.java
index 200bac8b3d0..1ad1324e56d 100644
--- a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRestFromXmlTest.java
+++ b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRestFromXmlTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.dsl.xml.jaxb.definition;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.rest.DummyRestConsumerFactory;
@@ -53,9 +52,8 @@ public class LoadRestFromXmlTest extends ContextTestSupport {
         foo.assertIsSatisfied();
 
         // load rest from XML and add them to the existing camel context
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
-        Resource resource = ecc.getResourceLoader().resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barRest.xml");
-        PluginHelper.getRoutesLoader(ecc).loadRoutes(resource);
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barRest.xml");
+        PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
         assertNotNull(context.getRoute("route1"), "Loaded rest route should be there");
         assertEquals(3, context.getRoutes().size());
diff --git a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlTest.java b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlTest.java
index 0c319ee574d..673f1c45b1c 100644
--- a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlTest.java
+++ b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.dsl.xml.jaxb.definition;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.Resource;
@@ -42,9 +41,8 @@ public class LoadRouteFromXmlTest extends ContextTestSupport {
 
         // START SNIPPET: e1
         // load route from XML and add them to the existing camel context
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
-        Resource resource = ecc.getResourceLoader().resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barRoute.xml");
-        PluginHelper.getRoutesLoader(ecc).loadRoutes(resource);
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barRoute.xml");
+        PluginHelper.getRoutesLoader(context).loadRoutes(resource);
         // END SNIPPET: e1
 
         assertNotNull(context.getRoute("bar"), "Loaded bar route should be there");
diff --git a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithInterceptTest.java b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithInterceptTest.java
index 879fdfc4e62..eb6e8d8d832 100644
--- a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithInterceptTest.java
+++ b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithInterceptTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.dsl.xml.jaxb.definition;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Test;
@@ -34,10 +33,9 @@ public class LoadRouteFromXmlWithInterceptTest extends ContextTestSupport {
 
     @Test
     public void testLoadRouteFromXmlWithIntercept() throws Exception {
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
         Resource resource
-                = ecc.getResourceLoader().resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barInterceptorRoute.xml");
-        PluginHelper.getRoutesLoader(ecc).loadRoutes(resource);
+                = PluginHelper.getResourceLoader(context).resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barInterceptorRoute.xml");
+        PluginHelper.getRoutesLoader(context).loadRoutes(resource);
         context.start();
 
         assertNotNull(context.getRoute("bar"), "Loaded bar route should be there");
diff --git a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithNamespaceTest.java b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithNamespaceTest.java
index 9dbcb6699ea..9dcb1442820 100644
--- a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithNamespaceTest.java
+++ b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithNamespaceTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.dsl.xml.jaxb.definition;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Route;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.Resource;
@@ -30,10 +29,9 @@ public class LoadRouteFromXmlWithNamespaceTest extends ContextTestSupport {
 
     @Test
     public void testLoadRouteWithNamespaceFromXml() throws Exception {
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
         Resource resource
-                = ecc.getResourceLoader().resolveResource("org/apache/camel/dsl/xml/jaxb/definition/routeWithNamespace.xml");
-        PluginHelper.getRoutesLoader(ecc).loadRoutes(resource);
+                = PluginHelper.getResourceLoader(context).resolveResource("org/apache/camel/dsl/xml/jaxb/definition/routeWithNamespace.xml");
+        PluginHelper.getRoutesLoader(context).loadRoutes(resource);
         context.start();
 
         Route routeWithNamespace = context.getRoute("routeWithNamespace");
diff --git a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithOnExceptionTest.java b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithOnExceptionTest.java
index 59401869c3f..5cacb3e827a 100644
--- a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithOnExceptionTest.java
+++ b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithOnExceptionTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.dsl.xml.jaxb.definition;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.Resource;
@@ -44,10 +43,9 @@ public class LoadRouteFromXmlWithOnExceptionTest extends ContextTestSupport {
 
     @Test
     public void testLoadRouteFromXmlWitOnException() throws Exception {
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
         Resource resource
-                = ecc.getResourceLoader().resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barOnExceptionRoute.xml");
-        PluginHelper.getRoutesLoader(ecc).loadRoutes(resource);
+                = PluginHelper.getResourceLoader(context).resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barOnExceptionRoute.xml");
+        PluginHelper.getRoutesLoader(context).loadRoutes(resource);
         context.start();
 
         assertNotNull(context.getRoute("bar"), "Loaded bar route should be there");
diff --git a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithPolicyTest.java b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithPolicyTest.java
index 2ed5bf74430..835ab7a554f 100644
--- a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithPolicyTest.java
+++ b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/LoadRouteFromXmlWithPolicyTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.dsl.xml.jaxb.definition;
 
 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.Route;
@@ -47,10 +46,9 @@ public class LoadRouteFromXmlWithPolicyTest extends ContextTestSupport {
 
     @Test
     public void testLoadRouteFromXmlWitPolicy() throws Exception {
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
         Resource resource
-                = ecc.getResourceLoader().resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barPolicyRoute.xml");
-        PluginHelper.getRoutesLoader(ecc).loadRoutes(resource);
+                = PluginHelper.getResourceLoader(context).resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barPolicyRoute.xml");
+        PluginHelper.getRoutesLoader(context).loadRoutes(resource);
         context.start();
 
         assertNotNull(context.getRoute("foo"), "Loaded foo route should be there");
diff --git a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/RouteTemplateLoadFromXmlTest.java b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/RouteTemplateLoadFromXmlTest.java
index 5dba13daa37..edd1ec005f9 100644
--- a/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/RouteTemplateLoadFromXmlTest.java
+++ b/dsl/camel-xml-jaxb-dsl-test/definition/src/test/java/org/apache/camel/dsl/xml/jaxb/definition/RouteTemplateLoadFromXmlTest.java
@@ -20,13 +20,12 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class RouteTemplateLoadFromXmlTest extends ContextTestSupport {
 
@@ -34,9 +33,8 @@ public class RouteTemplateLoadFromXmlTest extends ContextTestSupport {
     public void testDefineRouteTemplate() throws Exception {
         assertEquals(0, context.getRouteTemplateDefinitions().size());
 
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
-        Resource resource = ecc.getResourceLoader().resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barTemplate.xml");
-        PluginHelper.getRoutesLoader(ecc).loadRoutes(resource);
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barTemplate.xml");
+        PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
         assertEquals(1, context.getRouteTemplateDefinitions().size());
 
@@ -49,9 +47,8 @@ public class RouteTemplateLoadFromXmlTest extends ContextTestSupport {
     public void testCreateRouteFromRouteTemplate() throws Exception {
         assertEquals(0, context.getRouteTemplateDefinitions().size());
 
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
-        Resource resource = ecc.getResourceLoader().resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barTemplate.xml");
-        PluginHelper.getRoutesLoader(ecc).loadRoutes(resource);
+        Resource resource = PluginHelper.getResourceLoader(context).resolveResource("org/apache/camel/dsl/xml/jaxb/definition/barTemplate.xml");
+        PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
         assertEquals(1, context.getRouteTemplateDefinitions().size());
 
diff --git a/dsl/camel-xml-jaxb-dsl-test/spring/src/test/java/org/apache/camel/dsl/xml/jaxb/spring/CamelLoadRoutesFromXMLTest.java b/dsl/camel-xml-jaxb-dsl-test/spring/src/test/java/org/apache/camel/dsl/xml/jaxb/spring/CamelLoadRoutesFromXMLTest.java
index d2a23bcbe35..5934e274853 100644
--- a/dsl/camel-xml-jaxb-dsl-test/spring/src/test/java/org/apache/camel/dsl/xml/jaxb/spring/CamelLoadRoutesFromXMLTest.java
+++ b/dsl/camel-xml-jaxb-dsl-test/spring/src/test/java/org/apache/camel/dsl/xml/jaxb/spring/CamelLoadRoutesFromXMLTest.java
@@ -41,7 +41,7 @@ public class CamelLoadRoutesFromXMLTest extends ContextTestSupport {
         assertTrue(camel.getStatus().isStarted());
 
         // load routes from xml file
-        Resource resource = camel.getResourceLoader().resolveResource("org/apache/camel/spring/myRoutes.xml");
+        Resource resource = PluginHelper.getResourceLoader(camel).resolveResource("org/apache/camel/spring/myRoutes.xml");
         PluginHelper.getRoutesLoader(camel).loadRoutes(resource);
 
         assertEquals(2, camel.getRoutes().size());
@@ -77,7 +77,7 @@ public class CamelLoadRoutesFromXMLTest extends ContextTestSupport {
         //camel.getRouteController().removeRoute("bar");
 
         // load updated xml
-        resource = camel.getResourceLoader().resolveResource("org/apache/camel/spring/myUpdatedRoutes.xml");
+        resource = PluginHelper.getResourceLoader(camel).resolveResource("org/apache/camel/spring/myUpdatedRoutes.xml");
         PluginHelper.getRoutesLoader(camel).loadRoutes(resource);
 
         assertEquals(2, camel.getRoutes().size());
diff --git a/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlLoadRestTest.java b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlLoadRestTest.java
index 0d7c664c00b..c6c95c21982 100644
--- a/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlLoadRestTest.java
+++ b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlLoadRestTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dsl.xml.jaxb;
 
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.rest.DummyRestConsumerFactory;
@@ -58,8 +57,7 @@ public class JaxbXmlLoadRestTest {
             foo.assertIsSatisfied();
 
             // load rest from XML and add them to the existing camel context
-            ExtendedCamelContext ecc = context.getCamelContextExtension();
-            Resource resource = ecc.getResourceLoader().resolveResource(
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource(
                     "/org/apache/camel/dsl/xml/jaxb/barRest.xml");
 
             PluginHelper.getRoutesLoader(context).loadRoutes(resource);
diff --git a/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlLoadTest.java b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlLoadTest.java
index 03439a9ecf7..d30ecc64bce 100644
--- a/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlLoadTest.java
+++ b/dsl/camel-xml-jaxb-dsl/src/test/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlLoadTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dsl.xml.jaxb;
 
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
@@ -53,11 +52,10 @@ public class JaxbXmlLoadTest {
 
             // START SNIPPET: e1
             // load route from XML and add them to the existing camel context
-            ExtendedCamelContext ecc = context.getCamelContextExtension();
-            Resource resource = ecc.getResourceLoader().resolveResource(
+            Resource resource = PluginHelper.getResourceLoader(context).resolveResource(
                     "/org/apache/camel/dsl/xml/jaxb/barRoute.xml");
 
-            PluginHelper.getRoutesLoader(ecc).loadRoutes(resource);
+            PluginHelper.getRoutesLoader(context).loadRoutes(resource);
 
             // END SNIPPET: e1
             assertNotNull(context.getRoute("bar"), "Loaded bar route should be there");
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/LineNumberTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/LineNumberTest.groovy
index 10b02ae444d..5a1953dafd7 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/LineNumberTest.groovy
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/LineNumberTest.groovy
@@ -22,6 +22,7 @@ import org.apache.camel.model.FromDefinition
 import org.apache.camel.model.LogDefinition
 import org.apache.camel.model.RouteDefinition
 import org.apache.camel.model.ToDefinition
+import org.apache.camel.support.PluginHelper
 
 class LineNumberTest extends YamlTestSupport {
 
@@ -82,7 +83,7 @@ class LineNumberTest extends YamlTestSupport {
     def "line number file"() {
         setup:
         def rloc = 'classpath:/stuff/my-route.yaml'
-        def rdsl = context.resourceLoader.resolveResource(rloc)
+        def rdsl = PluginHelper.getResourceLoader(context).resolveResource(rloc)
         when:
         loadRoutes rdsl
         then:
@@ -120,7 +121,7 @@ class LineNumberTest extends YamlTestSupport {
     def "line number file with comments"() {
         setup:
         def rloc = 'classpath:/stuff/my-route-comment.yaml'
-        def rdsl = context.resourceLoader.resolveResource(rloc)
+        def rdsl = PluginHelper.getResourceLoader(context).resolveResource(rloc)
         when:
         loadRoutes rdsl
         then:
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RestTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RestTest.groovy
index c2a8160a569..f7e49a6ea8a 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RestTest.groovy
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RestTest.groovy
@@ -26,6 +26,7 @@ import org.apache.camel.model.rest.ParamDefinition
 import org.apache.camel.model.rest.PostDefinition
 import org.apache.camel.model.rest.RestDefinition
 import org.apache.camel.model.rest.VerbDefinition
+import org.apache.camel.support.PluginHelper
 
 class RestTest extends YamlTestSupport {
 
@@ -170,7 +171,7 @@ class RestTest extends YamlTestSupport {
     def "load rest (full)"() {
         setup:
             def rloc = 'classpath:/routes/rest-dsl.yaml'
-            def rdsl = context.resourceLoader.resolveResource(rloc)
+            def rdsl = PluginHelper.getResourceLoader(context).resolveResource(rloc)
         when:
             loadRoutes rdsl
         then:
@@ -181,7 +182,7 @@ class RestTest extends YamlTestSupport {
     def "load rest (generated)"() {
         setup:
             def rloc = 'classpath:/rest-dsl/generated-rest-dsl.yaml'
-            def rdsl = context.resourceLoader.resolveResource(rloc)
+            def rdsl = PluginHelper.getResourceLoader(context).resolveResource(rloc)
         when:
             loadRoutes rdsl
         then:
@@ -192,7 +193,7 @@ class RestTest extends YamlTestSupport {
     def "load rest (allowableValues)"() {
         setup:
             def rloc = 'classpath:/routes/rest-allowable-values-dsl.yaml'
-            def rdsl = context.resourceLoader.resolveResource(rloc)
+            def rdsl = PluginHelper.getResourceLoader(context).resolveResource(rloc)
         when:
             loadRoutes rdsl
         then:
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy
index 42a7a9c2d1d..182db37b96a 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy
@@ -30,6 +30,7 @@ import org.apache.camel.impl.DefaultCamelContext
 import org.apache.camel.model.RouteTemplateDefinition
 import org.apache.camel.spi.HasCamelContext
 import org.apache.camel.spi.Resource
+import org.apache.camel.spi.ResourceLoader
 import org.apache.camel.support.PluginHelper
 import org.apache.camel.support.ResourceHelper
 import spock.lang.AutoCleanup


[camel] 01/04: CAMEL-15105: make the UnitOfWorkFactory a plugin of the context

Posted by or...@apache.org.
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 59be6210306948568130dafbd96fa6950f90a4e6
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Sun Apr 2 09:44:31 2023 +0200

    CAMEL-15105: make the UnitOfWorkFactory a plugin of the context
---
 .../faulttolerance/FaultToleranceProcessor.java         |  3 ++-
 .../component/resilience4j/ResilienceProcessor.java     |  3 ++-
 .../java/org/apache/camel/ExtendedCamelContext.java     | 10 ----------
 .../apache/camel/impl/engine/AbstractCamelContext.java  |  2 +-
 .../camel/impl/engine/CamelInternalProcessor.java       |  8 ++++----
 .../camel/impl/engine/DefaultCamelContextExtension.java | 17 -----------------
 .../camel/impl/ExtendedCamelContextConfigurer.java      |  6 ------
 .../camel/impl/lw/LightweightCamelContextExtension.java | 10 ----------
 .../camel/core/xml/AbstractCamelContextFactoryBean.java |  2 +-
 .../apache/camel/impl/CustomUnitOfWorkFactoryTest.java  |  2 +-
 .../camel/main/DefaultConfigurationConfigurer.java      |  2 +-
 .../java/org/apache/camel/support/DefaultConsumer.java  |  3 +--
 .../camel/support/EventDrivenPollingConsumer.java       |  3 +--
 .../java/org/apache/camel/support/PluginHelper.java     | 15 +++++++++++++++
 14 files changed, 29 insertions(+), 57 deletions(-)

diff --git a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
index 435f051b339..a02a85a408e 100644
--- a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
+++ b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
@@ -54,6 +54,7 @@ import org.apache.camel.spi.RouteIdAware;
 import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.AsyncProcessorSupport;
 import org.apache.camel.support.ExchangeHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.UnitOfWorkHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -442,7 +443,7 @@ public class FaultToleranceProcessor extends AsyncProcessorSupport
                     uow = copy.getUnitOfWork();
                 } else {
                     // prepare uow on copy
-                    uow = copy.getContext().getCamelContextExtension().getUnitOfWorkFactory().createUnitOfWork(copy);
+                    uow = PluginHelper.getUnitOfWorkFactory(copy.getContext()).createUnitOfWork(copy);
                     copy.getExchangeExtension().setUnitOfWork(uow);
                     // the copy must be starting from the route where its copied from
                     Route route = ExchangeHelper.getRoute(exchange);
diff --git a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
index 5c8228155c0..4e8762ef047 100644
--- a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
+++ b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
@@ -57,6 +57,7 @@ import org.apache.camel.spi.RouteIdAware;
 import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.AsyncProcessorSupport;
 import org.apache.camel.support.ExchangeHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.UnitOfWorkHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -523,7 +524,7 @@ public class ResilienceProcessor extends AsyncProcessorSupport
                 uow = copy.getUnitOfWork();
             } else {
                 // prepare uow on copy
-                uow = copy.getContext().getCamelContextExtension().getUnitOfWorkFactory().createUnitOfWork(copy);
+                uow = PluginHelper.getUnitOfWorkFactory(copy.getContext()).createUnitOfWork(copy);
                 copy.getExchangeExtension().setUnitOfWork(uow);
                 // the copy must be starting from the route where its copied from
                 Route route = ExchangeHelper.getRoute(exchange);
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
index 2f4885dbd1f..862fe49de1d 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -319,16 +319,6 @@ public interface ExtendedCamelContext {
      */
     void setDeferServiceFactory(DeferServiceFactory deferServiceFactory);
 
-    /**
-     * Gets the {@link UnitOfWorkFactory} to use.
-     */
-    UnitOfWorkFactory getUnitOfWorkFactory();
-
-    /**
-     * Sets a custom {@link UnitOfWorkFactory} to use.
-     */
-    void setUnitOfWorkFactory(UnitOfWorkFactory unitOfWorkFactory);
-
     /**
      * Gets the {@link AnnotationBasedProcessorFactory} to use.
      */
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 478c0cb4a4d..3a2f9a05603 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -217,7 +217,6 @@ public abstract class AbstractCamelContext extends BaseService
     volatile BeanProcessorFactory beanProcessorFactory;
     volatile ResourceLoader resourceLoader;
     volatile ModelToXMLDumper modelToXMLDumper;
-    volatile UnitOfWorkFactory unitOfWorkFactory;
     volatile BeanIntrospection beanIntrospection;
     volatile boolean eventNotificationApplicable;
     volatile StartupStepRecorder startupStepRecorder = new DefaultStartupStepRecorder();
@@ -381,6 +380,7 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.lazyAddContextPlugin(RestBindingJaxbDataFormatFactory.class,
                 this::createRestBindingJaxbDataFormatFactory);
         camelContextExtension.lazyAddContextPlugin(BeanProxyFactory.class, this::createBeanProxyFactory);
+        camelContextExtension.lazyAddContextPlugin(UnitOfWorkFactory.class, this::createUnitOfWorkFactory);
 
         if (build) {
             try {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index 909045a74e7..476bbf9838e 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -60,6 +60,7 @@ import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.LoggerHelper;
 import org.apache.camel.support.MessageHelper;
 import org.apache.camel.support.OrderedComparator;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.SynchronizationAdapter;
 import org.apache.camel.support.UnitOfWorkHelper;
 import org.apache.camel.support.processor.DelegateAsyncProcessor;
@@ -740,14 +741,14 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
 
         private final Route route;
         private String routeId;
-        private UnitOfWorkFactory uowFactory;
+        private final UnitOfWorkFactory uowFactory;
 
         public UnitOfWorkProcessorAdvice(Route route, CamelContext camelContext) {
             this.route = route;
             if (route != null) {
                 this.routeId = route.getRouteId();
             }
-            this.uowFactory = camelContext.getCamelContextExtension().getUnitOfWorkFactory();
+            this.uowFactory = PluginHelper.getUnitOfWorkFactory(camelContext);
             // optimize uow factory to initialize it early and once per advice
             this.uowFactory.afterPropertiesConfigured(camelContext);
         }
@@ -811,8 +812,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
             if (uowFactory != null) {
                 return uowFactory.createUnitOfWork(exchange);
             } else {
-                return exchange.getContext().getCamelContextExtension().getUnitOfWorkFactory()
-                        .createUnitOfWork(exchange);
+                return PluginHelper.getUnitOfWorkFactory(exchange.getContext()).createUnitOfWork(exchange);
             }
         }
 
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
index d0931843446..c137fbf492d 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
@@ -292,23 +292,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
         this.errorHandlerFactory = errorHandlerFactory;
     }
 
-    @Override
-    public UnitOfWorkFactory getUnitOfWorkFactory() {
-        if (camelContext.unitOfWorkFactory == null) {
-            synchronized (camelContext.lock) {
-                if (camelContext.unitOfWorkFactory == null) {
-                    setUnitOfWorkFactory(camelContext.createUnitOfWorkFactory());
-                }
-            }
-        }
-        return camelContext.unitOfWorkFactory;
-    }
-
-    @Override
-    public void setUnitOfWorkFactory(UnitOfWorkFactory unitOfWorkFactory) {
-        camelContext.unitOfWorkFactory = camelContext.getInternalServiceManager().addService(unitOfWorkFactory);
-    }
-
     @Override
     public boolean isEventNotificationApplicable() {
         return camelContext.eventNotificationApplicable;
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 8d46b62df44..8169eabbb36 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -59,8 +59,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ResourceLoader": target.setResourceLoader(property(camelContext, org.apache.camel.spi.ResourceLoader.class, value)); return true;
         case "startupsteprecorder":
         case "StartupStepRecorder": target.setStartupStepRecorder(property(camelContext, org.apache.camel.spi.StartupStepRecorder.class, value)); return true;
-        case "unitofworkfactory":
-        case "UnitOfWorkFactory": target.setUnitOfWorkFactory(property(camelContext, org.apache.camel.spi.UnitOfWorkFactory.class, value)); return true;
         default: return false;
         }
     }
@@ -106,8 +104,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ResourceLoader": return org.apache.camel.spi.ResourceLoader.class;
         case "startupsteprecorder":
         case "StartupStepRecorder": return org.apache.camel.spi.StartupStepRecorder.class;
-        case "unitofworkfactory":
-        case "UnitOfWorkFactory": return org.apache.camel.spi.UnitOfWorkFactory.class;
         default: return null;
         }
     }
@@ -154,8 +150,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ResourceLoader": return target.getResourceLoader();
         case "startupsteprecorder":
         case "StartupStepRecorder": return target.getStartupStepRecorder();
-        case "unitofworkfactory":
-        case "UnitOfWorkFactory": return target.getUnitOfWorkFactory();
         default: return null;
         }
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
index b31188177b0..5a93f87baa5 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
@@ -244,16 +244,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public UnitOfWorkFactory getUnitOfWorkFactory() {
-        return camelContext.getCamelContextExtension().getUnitOfWorkFactory();
-    }
-
-    @Override
-    public void setUnitOfWorkFactory(UnitOfWorkFactory unitOfWorkFactory) {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public AnnotationBasedProcessorFactory getAnnotationBasedProcessorFactory() {
         throw new UnsupportedOperationException();
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 ea03b928510..35ea6341b13 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
@@ -287,7 +287,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
         UnitOfWorkFactory unitOfWorkFactory = getBeanForType(UnitOfWorkFactory.class);
         if (unitOfWorkFactory != null) {
             LOG.info("Using custom UnitOfWorkFactory: {}", unitOfWorkFactory);
-            getContext().getCamelContextExtension().setUnitOfWorkFactory(unitOfWorkFactory);
+            getContext().getCamelContextExtension().addContextPlugin(UnitOfWorkFactory.class, unitOfWorkFactory);
         }
         RuntimeEndpointRegistry runtimeEndpointRegistry = getBeanForType(RuntimeEndpointRegistry.class);
         if (runtimeEndpointRegistry != null) {
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/CustomUnitOfWorkFactoryTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/CustomUnitOfWorkFactoryTest.java
index dc655deb3d3..30890c204a2 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/CustomUnitOfWorkFactoryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/CustomUnitOfWorkFactoryTest.java
@@ -32,7 +32,7 @@ public class CustomUnitOfWorkFactoryTest extends ContextTestSupport {
     @Override
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
-        context.getCamelContextExtension().setUnitOfWorkFactory(new MyUnitOfWorkFactory());
+        context.getCamelContextExtension().addContextPlugin(UnitOfWorkFactory.class, new MyUnitOfWorkFactory());
         return context;
     }
 
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 d1cc0adc905..e88369a2252 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
@@ -399,7 +399,7 @@ public final class DefaultConfigurationConfigurer {
         }
         UnitOfWorkFactory uowf = getSingleBeanOfType(registry, UnitOfWorkFactory.class);
         if (uowf != null) {
-            ecc.getCamelContextExtension().setUnitOfWorkFactory(uowf);
+            ecc.getCamelContextExtension().addContextPlugin(UnitOfWorkFactory.class, uowf);
         }
         RuntimeEndpointRegistry rer = getSingleBeanOfType(registry, RuntimeEndpointRegistry.class);
         if (rer != null) {
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
index b7264ddf83d..0f8a8e70f14 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
@@ -111,8 +111,7 @@ public class DefaultConsumer extends ServiceSupport implements Consumer, RouteAw
         // create uow (however for pooled exchanges then the uow is pre-created)
         UnitOfWork uow = exchange.getUnitOfWork();
         if (uow == null) {
-            uow = endpoint.getCamelContext().getCamelContextExtension().getUnitOfWorkFactory()
-                    .createUnitOfWork(exchange);
+            uow = PluginHelper.getUnitOfWorkFactory(endpoint.getCamelContext()).createUnitOfWork(exchange);
             exchange.getExchangeExtension().setUnitOfWork(uow);
         }
         return uow;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java b/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
index adb0aa1d065..ebce7dbba9c 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
@@ -209,8 +209,7 @@ public class EventDrivenPollingConsumer extends PollingConsumerSupport implement
         Exchange copy = ExchangeHelper.createCorrelatedCopy(exchange, handover, true);
 
         // we want the copy to have an uow
-        UnitOfWork uow = getEndpoint().getCamelContext().getCamelContextExtension().getUnitOfWorkFactory()
-                .createUnitOfWork(copy);
+        UnitOfWork uow = PluginHelper.getUnitOfWorkFactory(getEndpoint().getCamelContext()).createUnitOfWork(copy);
         copy.getExchangeExtension().setUnitOfWork(uow);
 
         return copy;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
index a50bff03a3f..7b606273ce5 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
@@ -46,6 +46,7 @@ import org.apache.camel.spi.ProcessorFactory;
 import org.apache.camel.spi.RestBindingJaxbDataFormatFactory;
 import org.apache.camel.spi.RouteFactory;
 import org.apache.camel.spi.RoutesLoader;
+import org.apache.camel.spi.UnitOfWorkFactory;
 import org.apache.camel.spi.UriFactoryResolver;
 
 public final class PluginHelper {
@@ -501,4 +502,18 @@ public final class PluginHelper {
     public static BeanProxyFactory getBeanProxyFactory(ExtendedCamelContext extendedCamelContext) {
         return extendedCamelContext.getContextPlugin(BeanProxyFactory.class);
     }
+
+    /**
+     * Gets the {@link UnitOfWorkFactory} to use.
+     */
+    public static UnitOfWorkFactory getUnitOfWorkFactory(CamelContext camelContext) {
+        return getUnitOfWorkFactory(camelContext.getCamelContextExtension());
+    }
+
+    /**
+     * Gets the {@link UnitOfWorkFactory} to use.
+     */
+    public static UnitOfWorkFactory getUnitOfWorkFactory(ExtendedCamelContext extendedCamelContext) {
+        return extendedCamelContext.getContextPlugin(UnitOfWorkFactory.class);
+    }
 }


[camel] 04/04: CAMEL-15105: do register the BeanIntrospection as a plugin of the context

Posted by or...@apache.org.
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 e0ee0d34645f3dbd6c4a40f7c0fee26b59f1328e
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Sun Apr 2 11:52:25 2023 +0200

    CAMEL-15105: do register the BeanIntrospection as a plugin of the context
---
 .../src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java | 1 +
 1 file changed, 1 insertion(+)

diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 00db12e9ca2..eed8398aeb7 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -381,6 +381,7 @@ public abstract class AbstractCamelContext extends BaseService
                 this::createRestBindingJaxbDataFormatFactory);
         camelContextExtension.lazyAddContextPlugin(BeanProxyFactory.class, this::createBeanProxyFactory);
         camelContextExtension.lazyAddContextPlugin(UnitOfWorkFactory.class, this::createUnitOfWorkFactory);
+        camelContextExtension.lazyAddContextPlugin(BeanIntrospection.class, this::createBeanIntrospection);
         camelContextExtension.lazyAddContextPlugin(ResourceLoader.class, this::createResourceLoader);
 
         if (build) {


[camel] 02/04: CAMEL-15105: make the BeanIntrospection a plugin of the context

Posted by or...@apache.org.
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 9dd934cd4770ea42fcb5036119793648d0c6168b
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Sun Apr 2 10:20:16 2023 +0200

    CAMEL-15105: make the BeanIntrospection a plugin of the context
---
 .../camel/component/cron/CronPatternsTest.java      |  3 ++-
 .../camel/component/facebook/FacebookComponent.java |  3 ++-
 .../facebook/data/FacebookPropertiesHelper.java     |  3 ++-
 .../camel/component/fhir/FhirConfigurationIT.java   |  3 ++-
 .../google/calendar/GoogleCalendarConsumer.java     |  3 ++-
 .../google/calendar/GoogleCalendarProducer.java     |  3 ++-
 .../component/google/drive/GoogleDriveConsumer.java |  3 ++-
 .../component/google/drive/GoogleDriveProducer.java |  3 ++-
 .../component/google/mail/GoogleMailConsumer.java   |  3 ++-
 .../component/google/mail/GoogleMailProducer.java   |  3 ++-
 .../google/sheets/GoogleSheetsConsumer.java         |  3 ++-
 .../google/sheets/GoogleSheetsProducer.java         |  3 ++-
 .../apache/camel/component/http/HttpComponent.java  |  3 ++-
 .../apache/camel/component/mail/MailConsumer.java   |  3 ++-
 .../component/metrics/MetricsComponentTest.java     |  5 +++--
 .../faulttolerance/FaultToleranceReifier.java       |  2 +-
 ...ltToleranceRefConfigurationNoReflectionTest.java |  3 ++-
 .../faulttolerance/FaultToleranceRouteOkTest.java   |  3 ++-
 .../component/netty/http/NettyHttpComponent.java    |  3 ++-
 .../camel/component/netty/NettyComponent.java       |  3 ++-
 .../olingo4/Olingo4ComponentConsumerTest.java       | 11 +++++++----
 .../olingo4/Olingo4ComponentProducerTest.java       |  9 ++++++---
 .../component/resilience4j/ResilienceReifier.java   |  2 +-
 .../resilience4j/ResiliencePooledRouteOkTest.java   |  3 ++-
 .../resilience4j/ResilienceRouteOkTest.java         |  3 ++-
 .../camel/component/twilio/TwilioEndpoint.java      |  3 ++-
 .../camel/component/twilio/TwilioEndpointTest.java  | 13 ++++++-------
 .../cloud/UndertowServiceCallRouteTest.java         | 10 ++++++----
 .../rest/RestUndertowProducerGetPojoTest.java       |  3 ++-
 .../component/wordpress/WordpressComponent.java     |  3 ++-
 .../java/org/apache/camel/ExtendedCamelContext.java | 10 ----------
 .../camel/impl/engine/AbstractCamelContext.java     |  8 --------
 .../camel/impl/engine/CamelPostProcessorHelper.java |  4 ++--
 .../impl/engine/DefaultCamelContextExtension.java   | 17 -----------------
 .../camel/impl/ExtendedCamelContextConfigurer.java  |  6 ------
 .../impl/lw/LightweightCamelContextExtension.java   | 10 ----------
 .../camel/model/cloud/ServiceCallConfiguration.java |  2 +-
 .../camel/reifier/rest/RestBindingReifier.java      | 10 ++++++----
 .../component/log/LogComponentOptionsTest.java      | 21 +++++++++++----------
 .../org/apache/camel/converter/ConverterTest.java   |  3 ++-
 .../apache/camel/model/ModelSanityCheckerTest.java  |  3 ++-
 .../PropertyBindingSupportConfigurerTest.java       |  6 +++---
 .../camel/main/DefaultConfigurationConfigurer.java  |  8 +++++---
 .../PropertyBindingSupportOptionalValueTest.java    |  3 ++-
 ...opertyBindingSupportRootArrayReflectionTest.java |  7 ++++---
 .../main/PropertyBindingSupportRootArrayTest.java   |  3 ++-
 ...tyBindingSupportRootArrayWithConfigurerTest.java |  7 ++++---
 .../management/ManagedBeanIntrospectionTest.java    |  3 ++-
 .../java/org/apache/camel/support/PluginHelper.java | 15 +++++++++++++++
 .../camel/support/PropertyBindingSupport.java       | 11 ++++++-----
 .../support/component/AbstractApiComponent.java     |  2 +-
 .../component/ApiMethodPropertiesHelper.java        |  4 ++--
 .../support/management/MBeanInfoAssembler.java      |  5 ++---
 .../groovy/common/model/BeanConfiguration.groovy    |  4 ++--
 54 files changed, 150 insertions(+), 143 deletions(-)

diff --git a/components/camel-cron/src/test/java/org/apache/camel/component/cron/CronPatternsTest.java b/components/camel-cron/src/test/java/org/apache/camel/component/cron/CronPatternsTest.java
index 5460a1a896c..0aa451210f4 100644
--- a/components/camel-cron/src/test/java/org/apache/camel/component/cron/CronPatternsTest.java
+++ b/components/camel-cron/src/test/java/org/apache/camel/component/cron/CronPatternsTest.java
@@ -20,6 +20,7 @@ import org.apache.camel.FailedToCreateRouteException;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.DisplayName;
@@ -51,7 +52,7 @@ public class CronPatternsTest extends CamelTestSupport {
 
     @Test
     void testPlusInURI() throws Exception {
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
         bi.setLoggingLevel(LoggingLevel.INFO);
 
diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookComponent.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookComponent.java
index 2eb05330793..9ea6a8eaa86 100644
--- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookComponent.java
+++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/FacebookComponent.java
@@ -27,6 +27,7 @@ import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 
 /**
@@ -74,7 +75,7 @@ public class FacebookComponent extends DefaultComponent {
 
     private FacebookEndpointConfiguration copyComponentProperties() {
         Map<String, Object> componentProperties = new HashMap<>();
-        BeanIntrospection beanIntrospection = getCamelContext().getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(getCamelContext());
         beanIntrospection.getProperties(configuration, componentProperties, null, false);
 
         // create endpoint configuration with component properties
diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/FacebookPropertiesHelper.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/FacebookPropertiesHelper.java
index fa4712bc6fe..3ef90342639 100644
--- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/FacebookPropertiesHelper.java
+++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/FacebookPropertiesHelper.java
@@ -30,6 +30,7 @@ import org.apache.camel.component.facebook.FacebookConstants;
 import org.apache.camel.component.facebook.config.FacebookConfiguration;
 import org.apache.camel.component.facebook.config.FacebookEndpointConfiguration;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.PropertiesHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -121,7 +122,7 @@ public final class FacebookPropertiesHelper {
     public static void getEndpointProperties(
             CamelContext camelContext, FacebookEndpointConfiguration configuration,
             Map<String, Object> properties) {
-        BeanIntrospection beanIntrospection = camelContext.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(camelContext);
         if (beanIntrospection.getProperties(configuration, properties, null, false)) {
             final Set<String> names = properties.keySet();
             // remove component config properties so we only have endpoint properties
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirConfigurationIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirConfigurationIT.java
index ece78f3fa6d..6d8482af41f 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirConfigurationIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirConfigurationIT.java
@@ -28,6 +28,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.internal.FhirApiCollection;
 import org.apache.camel.component.fhir.internal.FhirCreateApiMethod;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
@@ -95,7 +96,7 @@ public class FhirConfigurationIT extends AbstractFhirTestSupport {
 
         assertTrue(interceptors.contains(this.mockClientInterceptor), "User defined IClientInterceptor not found");
 
-        long counter = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long counter = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
         assertEquals(0, counter, "Should not use reflection");
     }
 
diff --git a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarConsumer.java b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarConsumer.java
index 7f4d20507d4..231b076c0b0 100644
--- a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarConsumer.java
+++ b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarConsumer.java
@@ -24,6 +24,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.google.calendar.internal.GoogleCalendarApiName;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.component.AbstractApiConsumer;
 
 /**
@@ -40,7 +41,7 @@ public class GoogleCalendarConsumer extends AbstractApiConsumer<GoogleCalendarAp
         AbstractGoogleClientRequest request = (AbstractGoogleClientRequest) super.doInvokeMethod(properties);
         try {
             BeanIntrospection beanIntrospection
-                    = getEndpoint().getCamelContext().getCamelContextExtension().getBeanIntrospection();
+                    = PluginHelper.getBeanIntrospection(getEndpoint().getCamelContext());
             for (Entry<String, Object> p : properties.entrySet()) {
                 beanIntrospection.setProperty(getEndpoint().getCamelContext(), request, p.getKey(), p.getValue());
             }
diff --git a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarProducer.java b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarProducer.java
index af475157ee5..d74d925767c 100644
--- a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarProducer.java
+++ b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarProducer.java
@@ -24,6 +24,7 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.google.calendar.internal.GoogleCalendarApiName;
 import org.apache.camel.component.google.calendar.internal.GoogleCalendarPropertiesHelper;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.component.AbstractApiProducer;
 import org.apache.camel.support.component.ApiMethod;
 
@@ -41,7 +42,7 @@ public class GoogleCalendarProducer extends AbstractApiProducer<GoogleCalendarAp
         AbstractGoogleClientRequest request = (AbstractGoogleClientRequest) super.doInvokeMethod(method, properties);
         try {
             BeanIntrospection beanIntrospection
-                    = getEndpoint().getCamelContext().getCamelContextExtension().getBeanIntrospection();
+                    = PluginHelper.getBeanIntrospection(getEndpoint().getCamelContext());
             for (Entry<String, Object> p : properties.entrySet()) {
                 beanIntrospection.setProperty(getEndpoint().getCamelContext(), request, p.getKey(), p.getValue());
             }
diff --git a/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConsumer.java b/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConsumer.java
index 794b09f9066..62b0cebd74e 100644
--- a/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConsumer.java
+++ b/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConsumer.java
@@ -24,6 +24,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.google.drive.internal.GoogleDriveApiName;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.component.AbstractApiConsumer;
 
 /**
@@ -39,7 +40,7 @@ public class GoogleDriveConsumer extends AbstractApiConsumer<GoogleDriveApiName,
         AbstractGoogleClientRequest request = (AbstractGoogleClientRequest) super.doInvokeMethod(properties);
         try {
             BeanIntrospection beanIntrospection
-                    = getEndpoint().getCamelContext().getCamelContextExtension().getBeanIntrospection();
+                    = PluginHelper.getBeanIntrospection(getEndpoint().getCamelContext());
             for (Entry<String, Object> p : properties.entrySet()) {
                 beanIntrospection.setProperty(getEndpoint().getCamelContext(), request, p.getKey(), p.getValue());
             }
diff --git a/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveProducer.java b/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveProducer.java
index 4203fe65332..abdfcdf6551 100644
--- a/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveProducer.java
+++ b/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveProducer.java
@@ -25,6 +25,7 @@ import org.apache.camel.component.google.drive.internal.GoogleDriveApiName;
 import org.apache.camel.component.google.drive.internal.GoogleDriveConstants;
 import org.apache.camel.component.google.drive.internal.GoogleDrivePropertiesHelper;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.component.AbstractApiProducer;
 import org.apache.camel.support.component.ApiMethod;
 
@@ -42,7 +43,7 @@ public class GoogleDriveProducer extends AbstractApiProducer<GoogleDriveApiName,
         AbstractGoogleClientRequest request = (AbstractGoogleClientRequest) super.doInvokeMethod(method, properties);
         try {
             BeanIntrospection beanIntrospection
-                    = getEndpoint().getCamelContext().getCamelContextExtension().getBeanIntrospection();
+                    = PluginHelper.getBeanIntrospection(getEndpoint().getCamelContext());
             for (Entry<String, Object> p : properties.entrySet()) {
                 beanIntrospection.setProperty(getEndpoint().getCamelContext(), request, p.getKey(), p.getValue());
             }
diff --git a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailConsumer.java b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailConsumer.java
index 388ed26c8c3..c66b5c783c0 100644
--- a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailConsumer.java
+++ b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailConsumer.java
@@ -24,6 +24,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.google.mail.internal.GoogleMailApiName;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.component.AbstractApiConsumer;
 
 /**
@@ -40,7 +41,7 @@ public class GoogleMailConsumer extends AbstractApiConsumer<GoogleMailApiName, G
         AbstractGoogleClientRequest request = (AbstractGoogleClientRequest) super.doInvokeMethod(properties);
         try {
             BeanIntrospection beanIntrospection
-                    = getEndpoint().getCamelContext().getCamelContextExtension().getBeanIntrospection();
+                    = PluginHelper.getBeanIntrospection(getEndpoint().getCamelContext());
             for (Entry<String, Object> p : properties.entrySet()) {
                 beanIntrospection.setProperty(getEndpoint().getCamelContext(), request, p.getKey(), p.getValue());
             }
diff --git a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailProducer.java b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailProducer.java
index 713eb48009f..27876abc416 100644
--- a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailProducer.java
+++ b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailProducer.java
@@ -24,6 +24,7 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.google.mail.internal.GoogleMailApiName;
 import org.apache.camel.component.google.mail.internal.GoogleMailPropertiesHelper;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.component.AbstractApiProducer;
 import org.apache.camel.support.component.ApiMethod;
 
@@ -41,7 +42,7 @@ public class GoogleMailProducer extends AbstractApiProducer<GoogleMailApiName, G
         AbstractGoogleClientRequest request = (AbstractGoogleClientRequest) super.doInvokeMethod(method, properties);
         try {
             BeanIntrospection beanIntrospection
-                    = getEndpoint().getCamelContext().getCamelContextExtension().getBeanIntrospection();
+                    = PluginHelper.getBeanIntrospection(getEndpoint().getCamelContext());
             for (Entry<String, Object> p : properties.entrySet()) {
                 beanIntrospection.setProperty(getEndpoint().getCamelContext(), request, p.getKey(), p.getValue());
             }
diff --git a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
index 997c6ad772b..f175f340639 100644
--- a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
+++ b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
@@ -24,6 +24,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.component.AbstractApiConsumer;
 
 /**
@@ -40,7 +41,7 @@ public class GoogleSheetsConsumer extends AbstractApiConsumer<GoogleSheetsApiNam
         AbstractGoogleClientRequest<?> request = (AbstractGoogleClientRequest) super.doInvokeMethod(properties);
         try {
             BeanIntrospection beanIntrospection
-                    = getEndpoint().getCamelContext().getCamelContextExtension().getBeanIntrospection();
+                    = PluginHelper.getBeanIntrospection(getEndpoint().getCamelContext());
             for (Entry<String, Object> p : properties.entrySet()) {
                 beanIntrospection.setProperty(getEndpoint().getCamelContext(), request, p.getKey(), p.getValue());
             }
diff --git a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
index 41989a9d36d..997389478b1 100644
--- a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
+++ b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
@@ -24,6 +24,7 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsPropertiesHelper;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.component.AbstractApiProducer;
 import org.apache.camel.support.component.ApiMethod;
 
@@ -41,7 +42,7 @@ public class GoogleSheetsProducer extends AbstractApiProducer<GoogleSheetsApiNam
         AbstractGoogleClientRequest<?> request = (AbstractGoogleClientRequest) super.doInvokeMethod(method, properties);
         try {
             BeanIntrospection beanIntrospection
-                    = getEndpoint().getCamelContext().getCamelContextExtension().getBeanIntrospection();
+                    = PluginHelper.getBeanIntrospection(getEndpoint().getCamelContext());
             for (Entry<String, Object> p : properties.entrySet()) {
                 beanIntrospection.setProperty(getEndpoint().getCamelContext(), request, p.getKey(), p.getValue());
             }
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
index 974fb3c49df..2d856d74d5a 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
@@ -43,6 +43,7 @@ import org.apache.camel.spi.RestProducerFactory;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.support.RestProducerFactoryHelper;
 import org.apache.camel.support.jsse.SSLContextParameters;
@@ -399,7 +400,7 @@ public class HttpComponent extends HttpCommonComponent implements RestProducerFa
         // configure the endpoint with the common configuration from the component
         if (getHttpConfiguration() != null) {
             Map<String, Object> properties = new HashMap<>();
-            BeanIntrospection beanIntrospection = getCamelContext().getCamelContextExtension().getBeanIntrospection();
+            BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(getCamelContext());
             beanIntrospection.getProperties(getHttpConfiguration(), properties, null);
             setProperties(endpoint, properties);
         }
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
index d701de35f63..1534251650f 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
@@ -43,6 +43,7 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.attachment.Attachment;
 import org.apache.camel.attachment.AttachmentMessage;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.ScheduledBatchPollingConsumer;
 import org.apache.camel.support.SynchronizationAdapter;
 import org.apache.camel.util.CastUtils;
@@ -270,7 +271,7 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
             try {
                 LOG.trace("Calling setPeek(true) on mail message {}", mail);
                 BeanIntrospection beanIntrospection
-                        = getEndpoint().getCamelContext().getCamelContextExtension().getBeanIntrospection();
+                        = PluginHelper.getBeanIntrospection(getEndpoint().getCamelContext());
                 beanIntrospection.setProperty(getEndpoint().getCamelContext(), mail, "peek", true);
             } catch (Exception e) {
                 // ignore
diff --git a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MetricsComponentTest.java b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MetricsComponentTest.java
index 2429f5ad011..0a276418894 100644
--- a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MetricsComponentTest.java
+++ b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MetricsComponentTest.java
@@ -29,6 +29,7 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.impl.engine.DefaultBeanIntrospection;
 import org.apache.camel.spi.ConfigurerResolver;
 import org.apache.camel.spi.Registry;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -81,7 +82,7 @@ public class MetricsComponentTest {
         when(camelRegistry.lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME, MetricRegistry.class))
                 .thenReturn(metricRegistry);
         when(camelContext.getCamelContextExtension()).thenReturn(ecc);
-        when(ecc.getBeanIntrospection()).thenReturn(new DefaultBeanIntrospection());
+        when(PluginHelper.getBeanIntrospection(ecc)).thenReturn(new DefaultBeanIntrospection());
         when(ecc.getContextPlugin(ConfigurerResolver.class)).thenReturn((name, context) -> null);
 
         Map<String, Object> params = new HashMap<>();
@@ -110,7 +111,7 @@ public class MetricsComponentTest {
         when(camelRegistry.lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME, MetricRegistry.class))
                 .thenReturn(metricRegistry);
         when(camelContext.getCamelContextExtension()).thenReturn(ecc);
-        when(ecc.getBeanIntrospection()).thenReturn(new DefaultBeanIntrospection());
+        when(PluginHelper.getBeanIntrospection(ecc)).thenReturn(new DefaultBeanIntrospection());
         when(ecc.getContextPlugin(ConfigurerResolver.class)).thenReturn((name, context) -> null);
 
         Map<String, Object> params = new HashMap<>();
diff --git a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceReifier.java b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceReifier.java
index 18112e65bf2..6a7caf011c9 100644
--- a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceReifier.java
+++ b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceReifier.java
@@ -173,7 +173,7 @@ public class FaultToleranceReifier extends ProcessorReifier<CircuitBreakerDefini
     }
 
     private void loadProperties(Map<String, Object> properties, Optional<?> optional, PropertyConfigurer configurer) {
-        BeanIntrospection beanIntrospection = camelContext.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(camelContext);
         optional.ifPresent(bean -> {
             if (configurer instanceof ExtendedPropertyConfigurerGetter) {
                 ExtendedPropertyConfigurerGetter getter = (ExtendedPropertyConfigurerGetter) configurer;
diff --git a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/test/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceRefConfigurationNoReflectionTest.java b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/test/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceRefConfigurationNoReflectionTest.java
index 785253efaaf..c12d69f1137 100644
--- a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/test/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceRefConfigurationNoReflectionTest.java
+++ b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/test/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceRefConfigurationNoReflectionTest.java
@@ -23,6 +23,7 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.FaultToleranceConfigurationDefinition;
 import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.CircuitBreakerConstants;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
@@ -41,7 +42,7 @@ public class FaultToleranceRefConfigurationNoReflectionTest extends CamelTestSup
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
 
-        bi = context.getCamelContextExtension().getBeanIntrospection();
+        bi = PluginHelper.getBeanIntrospection(context);
         bi.setLoggingLevel(LoggingLevel.INFO);
         bi.resetCounters();
 
diff --git a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/test/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceRouteOkTest.java b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/test/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceRouteOkTest.java
index 503ba608011..6351baf6bbc 100644
--- a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/test/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceRouteOkTest.java
+++ b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/test/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceRouteOkTest.java
@@ -22,6 +22,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.CircuitBreakerConstants;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
@@ -40,7 +41,7 @@ public class FaultToleranceRouteOkTest extends CamelTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
 
-        bi = context.getCamelContextExtension().getBeanIntrospection();
+        bi = PluginHelper.getBeanIntrospection(context);
         bi.setLoggingLevel(LoggingLevel.INFO);
         bi.resetCounters();
 
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
index 9350203ccdb..ff3bfbd74d7 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
@@ -40,6 +40,7 @@ import org.apache.camel.spi.RestConsumerFactory;
 import org.apache.camel.spi.RestProducerFactory;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.support.RestComponentHelper;
 import org.apache.camel.support.RestProducerFactoryHelper;
@@ -103,7 +104,7 @@ public class NettyHttpComponent extends NettyComponent
                 "bootstrapConfiguration", NettyServerBootstrapConfiguration.class);
         if (bootstrapConfiguration != null) {
             Map<String, Object> options = new HashMap<>();
-            BeanIntrospection beanIntrospection = getCamelContext().getCamelContextExtension().getBeanIntrospection();
+            BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(getCamelContext());
             if (beanIntrospection.getProperties(bootstrapConfiguration, options, null, false)) {
                 PropertyBindingSupport.bindProperties(getCamelContext(), config, options);
             }
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyComponent.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyComponent.java
index d810fdc3071..01d5a85b4fa 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyComponent.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyComponent.java
@@ -30,6 +30,7 @@ import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -85,7 +86,7 @@ public class NettyComponent extends DefaultComponent implements SSLContextParame
                 "bootstrapConfiguration", NettyServerBootstrapConfiguration.class);
         if (bootstrapConfiguration != null) {
             Map<String, Object> options = new HashMap<>();
-            BeanIntrospection beanIntrospection = getCamelContext().getCamelContextExtension().getBeanIntrospection();
+            BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(getCamelContext());
             if (beanIntrospection.getProperties(bootstrapConfiguration, options, null, false)) {
                 PropertyBindingSupport.bindProperties(getCamelContext(), config, options);
             }
diff --git a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java
index 29bf30943e0..adf09310c76 100644
--- a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java
+++ b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java
@@ -22,6 +22,8 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.olingo.client.api.domain.ClientCollectionValue;
 import org.apache.olingo.client.api.domain.ClientComplexValue;
 import org.apache.olingo.client.api.domain.ClientEntity;
@@ -56,8 +58,9 @@ public class Olingo4ComponentConsumerTest extends AbstractOlingo4TestSupport {
     @Override
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
-        context.getCamelContextExtension().getBeanIntrospection().setLoggingLevel(LoggingLevel.INFO);
-        context.getCamelContextExtension().getBeanIntrospection().setExtendedStatistics(true);
+        final BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(context);
+        beanIntrospection.setLoggingLevel(LoggingLevel.INFO);
+        beanIntrospection.setExtendedStatistics(true);
         return context;
     }
 
@@ -92,7 +95,7 @@ public class Olingo4ComponentConsumerTest extends AbstractOlingo4TestSupport {
         }
 
         // should be reflection free
-        long counter = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long counter = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
         assertEquals(0, counter);
     }
 
@@ -276,7 +279,7 @@ public class Olingo4ComponentConsumerTest extends AbstractOlingo4TestSupport {
         assertEquals("San Francisco International Airport", nameProp.getValue().toString());
 
         // should be reflection free
-        long counter = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long counter = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
         assertEquals(0, counter);
     }
 
diff --git a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java
index 7a96e112023..beb0a939db9 100644
--- a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java
+++ b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java
@@ -32,6 +32,8 @@ import org.apache.camel.component.olingo4.api.batch.Olingo4BatchQueryRequest;
 import org.apache.camel.component.olingo4.api.batch.Olingo4BatchRequest;
 import org.apache.camel.component.olingo4.api.batch.Olingo4BatchResponse;
 import org.apache.camel.component.olingo4.api.batch.Operation;
+import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.olingo.client.api.domain.ClientCollectionValue;
 import org.apache.olingo.client.api.domain.ClientComplexValue;
 import org.apache.olingo.client.api.domain.ClientEntity;
@@ -80,8 +82,9 @@ public class Olingo4ComponentProducerTest extends AbstractOlingo4TestSupport {
     @Override
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
-        context.getCamelContextExtension().getBeanIntrospection().setLoggingLevel(LoggingLevel.INFO);
-        context.getCamelContextExtension().getBeanIntrospection().setExtendedStatistics(true);
+        final BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(context);
+        beanIntrospection.setLoggingLevel(LoggingLevel.INFO);
+        beanIntrospection.setExtendedStatistics(true);
         return context;
     }
 
@@ -143,7 +146,7 @@ public class Olingo4ComponentProducerTest extends AbstractOlingo4TestSupport {
         assertNotNull(unbFuncReturn);
 
         // should be reflection free
-        long counter = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long counter = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
         assertEquals(0, counter);
     }
 
diff --git a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
index d6508ff5b76..2b63ca87eda 100644
--- a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
+++ b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
@@ -216,7 +216,7 @@ public class ResilienceReifier extends ProcessorReifier<CircuitBreakerDefinition
     }
 
     private void loadProperties(Map<String, Object> properties, Optional<?> optional, PropertyConfigurer configurer) {
-        BeanIntrospection beanIntrospection = camelContext.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(camelContext);
         optional.ifPresent(bean -> {
             if (configurer instanceof ExtendedPropertyConfigurerGetter) {
                 ExtendedPropertyConfigurerGetter getter = (ExtendedPropertyConfigurerGetter) configurer;
diff --git a/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResiliencePooledRouteOkTest.java b/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResiliencePooledRouteOkTest.java
index 1336a62c50d..06de795f294 100644
--- a/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResiliencePooledRouteOkTest.java
+++ b/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResiliencePooledRouteOkTest.java
@@ -23,6 +23,7 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.engine.PooledExchangeFactory;
 import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.CircuitBreakerConstants;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
@@ -42,7 +43,7 @@ public class ResiliencePooledRouteOkTest extends CamelTestSupport {
         CamelContext context = super.createCamelContext();
         context.getCamelContextExtension().setExchangeFactory(new PooledExchangeFactory());
 
-        bi = context.getCamelContextExtension().getBeanIntrospection();
+        bi = PluginHelper.getBeanIntrospection(context);
         bi.setLoggingLevel(LoggingLevel.INFO);
         bi.resetCounters();
 
diff --git a/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceRouteOkTest.java b/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceRouteOkTest.java
index eea15802ae6..27f100a239b 100644
--- a/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceRouteOkTest.java
+++ b/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceRouteOkTest.java
@@ -22,6 +22,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.CircuitBreakerConstants;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
@@ -40,7 +41,7 @@ public class ResilienceRouteOkTest extends CamelTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
 
-        bi = context.getCamelContextExtension().getBeanIntrospection();
+        bi = PluginHelper.getBeanIntrospection(context);
         bi.setLoggingLevel(LoggingLevel.INFO);
         bi.resetCounters();
 
diff --git a/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java b/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java
index 6aa760de997..042611cc405 100644
--- a/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java
+++ b/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java
@@ -34,6 +34,7 @@ import org.apache.camel.component.twilio.internal.TwilioPropertiesHelper;
 import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.component.AbstractApiEndpoint;
 import org.apache.camel.support.component.ApiMethod;
 import org.apache.camel.support.component.ApiMethodPropertiesHelper;
@@ -106,7 +107,7 @@ public class TwilioEndpoint extends AbstractApiEndpoint<TwilioApiName, TwilioCon
         }
         String methodName = EXECUTOR_METHOD_MAP.get(method.getName());
         try {
-            BeanIntrospection beanIntrospection = getCamelContext().getCamelContextExtension().getBeanIntrospection();
+            BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(getCamelContext());
             for (Map.Entry<String, Object> p : properties.entrySet()) {
                 beanIntrospection.setProperty(getCamelContext(), executor, p.getKey(), p.getValue());
             }
diff --git a/components/camel-twilio/src/test/java/org/apache/camel/component/twilio/TwilioEndpointTest.java b/components/camel-twilio/src/test/java/org/apache/camel/component/twilio/TwilioEndpointTest.java
index 38b5295ee7a..b336e1e9f38 100644
--- a/components/camel-twilio/src/test/java/org/apache/camel/component/twilio/TwilioEndpointTest.java
+++ b/components/camel-twilio/src/test/java/org/apache/camel/component/twilio/TwilioEndpointTest.java
@@ -17,8 +17,9 @@
 package org.apache.camel.component.twilio;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.LoggingLevel;
+import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -27,23 +28,21 @@ public class TwilioEndpointTest extends AbstractTwilioTestSupport {
     @Override
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
-        ecc.getBeanIntrospection().setLoggingLevel(LoggingLevel.INFO);
+        PluginHelper.getBeanIntrospection(context).setLoggingLevel(LoggingLevel.INFO);
         return context;
     }
 
     @Test
     public void testTwilioEndpoint() {
         // should not use reflection when creating and configuring endpoint
-
-        ExtendedCamelContext ecc = context.getCamelContextExtension();
-        long before = ecc.getBeanIntrospection().getInvokedCounter();
+        final BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(context);
+        long before = beanIntrospection.getInvokedCounter();
 
         TwilioEndpoint te = context.getEndpoint("twilio:account/fetcher?pathSid=123", TwilioEndpoint.class);
         AccountEndpointConfiguration aec = (AccountEndpointConfiguration) te.getConfiguration();
         Assertions.assertEquals("123", aec.getPathSid());
 
-        long after = ecc.getBeanIntrospection().getInvokedCounter();
+        long after = beanIntrospection.getInvokedCounter();
         Assertions.assertEquals(before, after);
     }
 }
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/cloud/UndertowServiceCallRouteTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/cloud/UndertowServiceCallRouteTest.java
index 29dbaaee2a1..144052adbb4 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/cloud/UndertowServiceCallRouteTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/cloud/UndertowServiceCallRouteTest.java
@@ -23,6 +23,7 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
@@ -37,14 +38,15 @@ public class UndertowServiceCallRouteTest extends CamelTestSupport {
     @Override
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
-        context.getCamelContextExtension().getBeanIntrospection().setExtendedStatistics(true);
-        context.getCamelContextExtension().getBeanIntrospection().setLoggingLevel(LoggingLevel.INFO);
+        final BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(context);
+        beanIntrospection.setExtendedStatistics(true);
+        beanIntrospection.setLoggingLevel(LoggingLevel.INFO);
         return context;
     }
 
     @Test
     public void testCustomCall() {
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
 
         assertEquals("8081", template.requestBody("direct:custom", "hello", String.class));
         assertEquals("8082", template.requestBody("direct:custom", "hello", String.class));
@@ -55,7 +57,7 @@ public class UndertowServiceCallRouteTest extends CamelTestSupport {
 
     @Test
     public void testDefaultSchema() {
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
 
         try {
             assertEquals("8081", template.requestBody("direct:default", "hello", String.class));
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowProducerGetPojoTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowProducerGetPojoTest.java
index 4425a38fa17..4ee523e4c77 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowProducerGetPojoTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowProducerGetPojoTest.java
@@ -21,6 +21,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.undertow.BaseUndertowTest;
 import org.apache.camel.model.rest.RestBindingMode;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Test;
 
 import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
@@ -32,7 +33,7 @@ public class RestUndertowProducerGetPojoTest extends BaseUndertowTest {
     @Test
     public void testUndertowGetPojoRequest() {
         // should not use reflection when using rest binding in the rest producer
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setLoggingLevel(LoggingLevel.INFO);
         bi.resetCounters();
 
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponent.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponent.java
index 099bbc52e89..6565a48fe28 100644
--- a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponent.java
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressComponent.java
@@ -25,6 +25,7 @@ import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
+import org.apache.camel.support.PluginHelper;
 
 @Component("wordpress")
 public class WordpressComponent extends DefaultComponent {
@@ -60,7 +61,7 @@ public class WordpressComponent extends DefaultComponent {
         if (configuration != null) {
             // TODO: Better to make WordpressConfiguration cloneable
             Map<String, Object> properties = new HashMap<>();
-            BeanIntrospection beanIntrospection = getCamelContext().getCamelContextExtension().getBeanIntrospection();
+            BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(getCamelContext());
             beanIntrospection.getProperties(configuration, properties, null, false);
             properties.forEach(parameters::putIfAbsent);
         }
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
index 862fe49de1d..e7c09eab5bb 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -365,16 +365,6 @@ public interface ExtendedCamelContext {
      */
     void addLogListener(LogListener listener);
 
-    /**
-     * Gets the {@link BeanIntrospection}
-     */
-    BeanIntrospection getBeanIntrospection();
-
-    /**
-     * Sets a custom {@link BeanIntrospection}.
-     */
-    void setBeanIntrospection(BeanIntrospection beanIntrospection);
-
     /**
      * Gets the {@link HeadersMapFactory} to use.
      */
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 3a2f9a05603..aa511feb1c2 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -4167,14 +4167,6 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.addInterceptStrategy(interceptStrategy);
     }
 
-    public BeanIntrospection getBeanIntrospection() {
-        return camelContextExtension.getBeanIntrospection();
-    }
-
-    public void setBeanIntrospection(BeanIntrospection beanIntrospection) {
-        camelContextExtension.setBeanIntrospection(beanIntrospection);
-    }
-
     public ReactiveExecutor getReactiveExecutor() {
         return camelContextExtension.getReactiveExecutor();
     }
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 dc951d3a011..9a80eac577d 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
@@ -191,11 +191,11 @@ public class CamelPostProcessorHelper implements CamelContextAware {
         // 2. then the getter with Endpoint as postfix
         // 3. then if start with on then try step 1 and 2 again, but omit the on prefix
         try {
-            Object value = getCamelContext().getCamelContextExtension().getBeanIntrospection().getOrElseProperty(bean,
+            Object value = PluginHelper.getBeanIntrospection(getCamelContext()).getOrElseProperty(bean,
                     propertyName, null, false);
             if (value == null) {
                 // try endpoint as postfix
-                value = getCamelContext().getCamelContextExtension().getBeanIntrospection().getOrElseProperty(bean,
+                value = PluginHelper.getBeanIntrospection(getCamelContext()).getOrElseProperty(bean,
                         propertyName + "Endpoint", null, false);
             }
             if (value == null && propertyName.startsWith("on")) {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
index c137fbf492d..40ce95e0959 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
@@ -386,23 +386,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
         }
     }
 
-    @Override
-    public BeanIntrospection getBeanIntrospection() {
-        if (camelContext.beanIntrospection == null) {
-            synchronized (camelContext.lock) {
-                if (camelContext.beanIntrospection == null) {
-                    setBeanIntrospection(camelContext.createBeanIntrospection());
-                }
-            }
-        }
-        return camelContext.beanIntrospection;
-    }
-
-    @Override
-    public void setBeanIntrospection(BeanIntrospection beanIntrospection) {
-        camelContext.beanIntrospection = camelContext.getInternalServiceManager().addService(beanIntrospection);
-    }
-
     @Override
     public String getBasePackageScan() {
         return basePackageScan;
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 8169eabbb36..8d662d241b9 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -25,8 +25,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "AnnotationBasedProcessorFactory": target.setAnnotationBasedProcessorFactory(property(camelContext, org.apache.camel.spi.AnnotationBasedProcessorFactory.class, value)); return true;
         case "basepackagescan":
         case "BasePackageScan": target.setBasePackageScan(property(camelContext, java.lang.String.class, value)); return true;
-        case "beanintrospection":
-        case "BeanIntrospection": target.setBeanIntrospection(property(camelContext, org.apache.camel.spi.BeanIntrospection.class, value)); return true;
         case "bootstrapfactoryfinder":
         case "BootstrapFactoryFinder": target.setBootstrapFactoryFinder(property(camelContext, org.apache.camel.spi.FactoryFinder.class, value)); return true;
         case "deferservicefactory":
@@ -70,8 +68,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "AnnotationBasedProcessorFactory": return org.apache.camel.spi.AnnotationBasedProcessorFactory.class;
         case "basepackagescan":
         case "BasePackageScan": return java.lang.String.class;
-        case "beanintrospection":
-        case "BeanIntrospection": return org.apache.camel.spi.BeanIntrospection.class;
         case "bootstrapfactoryfinder":
         case "BootstrapFactoryFinder": return org.apache.camel.spi.FactoryFinder.class;
         case "deferservicefactory":
@@ -116,8 +112,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "AnnotationBasedProcessorFactory": return target.getAnnotationBasedProcessorFactory();
         case "basepackagescan":
         case "BasePackageScan": return target.getBasePackageScan();
-        case "beanintrospection":
-        case "BeanIntrospection": return target.getBeanIntrospection();
         case "bootstrapfactoryfinder":
         case "BootstrapFactoryFinder": return target.getBootstrapFactoryFinder();
         case "deferservicefactory":
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
index 5a93f87baa5..de6e3e6ec07 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
@@ -269,16 +269,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public BeanIntrospection getBeanIntrospection() {
-        return camelContext.getCamelContextExtension().getBeanIntrospection();
-    }
-
-    @Override
-    public void setBeanIntrospection(BeanIntrospection beanIntrospection) {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public HeadersMapFactory getHeadersMapFactory() {
         return camelContext.getCamelContextExtension().getHeadersMapFactory();
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/cloud/ServiceCallConfiguration.java b/core/camel-core-model/src/main/java/org/apache/camel/model/cloud/ServiceCallConfiguration.java
index 851b14a5c95..fa44e2aa88e 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/cloud/ServiceCallConfiguration.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/cloud/ServiceCallConfiguration.java
@@ -117,7 +117,7 @@ public abstract class ServiceCallConfiguration extends IdentifiedType {
                 }
             }
         } else {
-            context.getCamelContextExtension().getBeanIntrospection().getProperties(target, answer,
+            PluginHelper.getBeanIntrospection(context).getProperties(target, answer,
                     null, false);
         }
 
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
index 79833129bec..2fde750ffb1 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
@@ -24,6 +24,7 @@ import org.apache.camel.model.rest.RestBindingDefinition;
 import org.apache.camel.model.rest.RestBindingMode;
 import org.apache.camel.processor.RestBindingAdvice;
 import org.apache.camel.reifier.AbstractReifier;
+import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.support.CamelContextHelper;
@@ -160,10 +161,11 @@ public class RestBindingReifier extends AbstractReifier {
             String typeName = useList ? type.substring(0, type.length() - 2) : type;
             clazz = camelContext.getClassResolver().resolveMandatoryClass(typeName);
         }
+        final BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(camelContext);
         if (clazz != null) {
-            camelContext.getCamelContextExtension().getBeanIntrospection().setProperty(camelContext, json,
+            beanIntrospection.setProperty(camelContext, json,
                     "unmarshalType", clazz);
-            camelContext.getCamelContextExtension().getBeanIntrospection().setProperty(camelContext, json, "useList",
+            beanIntrospection.setProperty(camelContext, json, "useList",
                     useList);
         }
 
@@ -182,9 +184,9 @@ public class RestBindingReifier extends AbstractReifier {
         }
 
         if (outClazz != null) {
-            camelContext.getCamelContextExtension().getBeanIntrospection().setProperty(camelContext, outJson,
+            beanIntrospection.setProperty(camelContext, outJson,
                     "unmarshalType", outClazz);
-            camelContext.getCamelContextExtension().getBeanIntrospection().setProperty(camelContext, outJson, "useList",
+            beanIntrospection.setProperty(camelContext, outJson, "useList",
                     outUseList);
         }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/log/LogComponentOptionsTest.java b/core/camel-core/src/test/java/org/apache/camel/component/log/LogComponentOptionsTest.java
index 078f4761c2d..d301b1a3802 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/log/LogComponentOptionsTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/log/LogComponentOptionsTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.log;
 
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.support.processor.DefaultExchangeFormatter;
 import org.junit.jupiter.api.Test;
@@ -34,7 +35,7 @@ public class LogComponentOptionsTest extends ContextTestSupport {
     public void testFastLogComponentOptions() throws Exception {
         context.start();
 
-        long before = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long before = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
 
         DefaultExchangeFormatter myFormatter = new DefaultExchangeFormatter();
 
@@ -47,7 +48,7 @@ public class LogComponentOptionsTest extends ContextTestSupport {
 
         assertSame(myFormatter, log.getExchangeFormatter());
 
-        long after = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long after = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
 
         assertEquals(before, after, "Should not use Java reflection");
     }
@@ -56,7 +57,7 @@ public class LogComponentOptionsTest extends ContextTestSupport {
     public void testFastLogComponentNestedOptions() throws Exception {
         context.start();
 
-        long before = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long before = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
 
         DefaultExchangeFormatter myFormatter = new DefaultExchangeFormatter();
 
@@ -70,7 +71,7 @@ public class LogComponentOptionsTest extends ContextTestSupport {
 
         assertSame(myFormatter, log.getExchangeFormatter());
 
-        long after = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long after = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
 
         assertTrue(after > before, "Should use Java reflection");
     }
@@ -79,7 +80,7 @@ public class LogComponentOptionsTest extends ContextTestSupport {
     public void testFastLogComponentOptionsLookupRegistry() throws Exception {
         context.start();
 
-        long before = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long before = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
 
         DefaultExchangeFormatter myFormatter = new DefaultExchangeFormatter();
         context.getRegistry().bind("myGreatFormatter", myFormatter);
@@ -95,7 +96,7 @@ public class LogComponentOptionsTest extends ContextTestSupport {
 
         assertSame(myFormatter, log.getExchangeFormatter());
 
-        long after = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long after = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
 
         assertEquals(before, after, "Should not use Java reflection");
     }
@@ -104,7 +105,7 @@ public class LogComponentOptionsTest extends ContextTestSupport {
     public void testSlowLogComponentOptions() throws Exception {
         context.start();
 
-        long before = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long before = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
 
         DefaultExchangeFormatter myFormatter = new DefaultExchangeFormatter();
 
@@ -118,7 +119,7 @@ public class LogComponentOptionsTest extends ContextTestSupport {
         assertSame(myFormatter, log.getExchangeFormatter());
         assertTrue(myFormatter.isShowExchangeId());
 
-        long after = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long after = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
 
         assertTrue(after > before, "Should use reflection");
     }
@@ -127,7 +128,7 @@ public class LogComponentOptionsTest extends ContextTestSupport {
     public void testSlowLogComponentOptionsLookupRegistry() throws Exception {
         context.start();
 
-        long before = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long before = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
 
         DefaultExchangeFormatter myFormatter = new DefaultExchangeFormatter();
         context.getRegistry().bind("myGreatFormatter", myFormatter);
@@ -144,7 +145,7 @@ public class LogComponentOptionsTest extends ContextTestSupport {
         assertSame(myFormatter, log.getExchangeFormatter());
         assertTrue(myFormatter.isShowExchangeId());
 
-        long after = context.getCamelContextExtension().getBeanIntrospection().getInvokedCounter();
+        long after = PluginHelper.getBeanIntrospection(context).getInvokedCounter();
 
         assertTrue(after > before, "Should use reflection");
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java b/core/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
index 67c02345979..6ebb93b7210 100644
--- a/core/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
@@ -36,6 +36,7 @@ import org.apache.camel.impl.converter.DefaultTypeConverter;
 import org.apache.camel.impl.engine.DefaultPackageScanClassResolver;
 import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.support.DefaultExchange;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ReflectionInjector;
 import org.junit.jupiter.api.BeforeEach;
@@ -192,7 +193,7 @@ public class ConverterTest extends TestSupport {
 
         CamelContext context = new DefaultCamelContext();
         context.start();
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
 
         assertDoesNotThrow(() -> bi.setProperty(context, converter, bean, "foo", "4", null, true, true, true),
                 "Setting an int property in a bean, should have succeeded without throwing exceptions");
diff --git a/core/camel-core/src/test/java/org/apache/camel/model/ModelSanityCheckerTest.java b/core/camel-core/src/test/java/org/apache/camel/model/ModelSanityCheckerTest.java
index 3dfc9607a1a..0300f87c064 100644
--- a/core/camel-core/src/test/java/org/apache/camel/model/ModelSanityCheckerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/model/ModelSanityCheckerTest.java
@@ -29,6 +29,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.engine.DefaultPackageScanClassResolver;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -53,7 +54,7 @@ public class ModelSanityCheckerTest {
     public void testSanity() throws Exception {
         CamelContext context = new DefaultCamelContext();
         context.start();
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
 
         Set<Class<?>> classes = discoverJaxbClasses();
         assertNotNull(classes);
diff --git a/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportConfigurerTest.java b/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportConfigurerTest.java
index 425f5ba3b8c..f65575f4e5a 100644
--- a/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportConfigurerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportConfigurerTest.java
@@ -58,7 +58,7 @@ public class PropertyBindingSupportConfigurerTest extends ContextTestSupport {
 
     @Test
     public void testProperties() throws Exception {
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
         bi.setLoggingLevel(LoggingLevel.WARN);
 
@@ -86,7 +86,7 @@ public class PropertyBindingSupportConfigurerTest extends ContextTestSupport {
 
     @Test
     public void testPropertiesNested() throws Exception {
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
         bi.setLoggingLevel(LoggingLevel.WARN);
 
@@ -220,7 +220,7 @@ public class PropertyBindingSupportConfigurerTest extends ContextTestSupport {
 
     @Test
     public void testPropertiesNoReflection() throws Exception {
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
         bi.setLoggingLevel(LoggingLevel.WARN);
 
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 e88369a2252..10a96b653bc 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
@@ -42,6 +42,7 @@ import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ModelLifecycleStrategy;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
+import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.CliConnectorFactory;
 import org.apache.camel.spi.ContextReloadStrategy;
@@ -137,11 +138,12 @@ public final class DefaultConfigurationConfigurer {
 
         ecc.setLightweight(config.isLightweight());
         PluginHelper.getBeanPostProcessor(ecc).setEnabled(config.isBeanPostProcessorEnabled());
-        ecc.getBeanIntrospection().setExtendedStatistics(config.isBeanIntrospectionExtendedStatistics());
+        final BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(ecc);
+        beanIntrospection.setExtendedStatistics(config.isBeanIntrospectionExtendedStatistics());
         if (config.getBeanIntrospectionLoggingLevel() != null) {
-            ecc.getBeanIntrospection().setLoggingLevel(config.getBeanIntrospectionLoggingLevel());
+            beanIntrospection.setLoggingLevel(config.getBeanIntrospectionLoggingLevel());
         }
-        ecc.getBeanIntrospection().afterPropertiesConfigured(camelContext);
+        beanIntrospection.afterPropertiesConfigured(camelContext);
 
         if ("pooled".equals(config.getExchangeFactory())) {
             ecc.setExchangeFactory(new PooledExchangeFactory());
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportOptionalValueTest.java b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportOptionalValueTest.java
index 05852bfdc0b..2020e516afe 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportOptionalValueTest.java
+++ b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportOptionalValueTest.java
@@ -21,6 +21,7 @@ import java.util.Properties;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.junit.jupiter.api.Test;
 
@@ -35,7 +36,7 @@ public class PropertyBindingSupportOptionalValueTest {
     public void testOptionalValue() throws Exception {
         CamelContext context = new DefaultCamelContext();
 
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
 
         Properties prop = new Properties();
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayReflectionTest.java b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayReflectionTest.java
index c60a2e0d502..5208277a89c 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayReflectionTest.java
+++ b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayReflectionTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.main;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.junit.jupiter.api.Test;
 
@@ -34,7 +35,7 @@ public class PropertyBindingSupportRootArrayReflectionTest {
     public void testRootArray() throws Exception {
         CamelContext context = new DefaultCamelContext();
 
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
 
         context.start();
@@ -64,7 +65,7 @@ public class PropertyBindingSupportRootArrayReflectionTest {
     public void testNestedArray() throws Exception {
         CamelContext context = new DefaultCamelContext();
 
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
 
         context.start();
@@ -96,7 +97,7 @@ public class PropertyBindingSupportRootArrayReflectionTest {
     public void testNestedArrayAutodetect() throws Exception {
         CamelContext context = new DefaultCamelContext();
 
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
 
         context.start();
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayTest.java b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayTest.java
index 852bc9006c1..4b10c928fcb 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayTest.java
+++ b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.main;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.junit.jupiter.api.Test;
 
@@ -33,7 +34,7 @@ public class PropertyBindingSupportRootArrayTest {
     public void testRootArray() throws Exception {
         CamelContext context = new DefaultCamelContext();
 
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
 
         context.start();
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java
index b1be9bbeadf..42d7f27c049 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java
+++ b/core/camel-main/src/test/java/org/apache/camel/main/PropertyBindingSupportRootArrayWithConfigurerTest.java
@@ -20,6 +20,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.junit.jupiter.api.Test;
 
@@ -34,7 +35,7 @@ public class PropertyBindingSupportRootArrayWithConfigurerTest {
     public void testRootArray() throws Exception {
         CamelContext context = new DefaultCamelContext();
 
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
         bi.setLoggingLevel(LoggingLevel.WARN);
 
@@ -67,7 +68,7 @@ public class PropertyBindingSupportRootArrayWithConfigurerTest {
     public void testRootArrayAutoDetectClass() throws Exception {
         CamelContext context = new DefaultCamelContext();
 
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
         bi.setLoggingLevel(LoggingLevel.WARN);
 
@@ -100,7 +101,7 @@ public class PropertyBindingSupportRootArrayWithConfigurerTest {
     public void testRootArrayAutoDetectClassTwo() throws Exception {
         CamelContext context = new DefaultCamelContext();
 
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
         bi.setExtendedStatistics(true);
         bi.setLoggingLevel(LoggingLevel.WARN);
 
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java
index 6f1b9392f50..8bb6735cc01 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java
@@ -24,6 +24,7 @@ import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.condition.OS;
@@ -66,7 +67,7 @@ public class ManagedBeanIntrospectionTest extends ManagementTestSupport {
         Long counter = (Long) mbeanServer.getAttribute(on, "InvokedCounter");
         assertEquals(0, counter.intValue(), "Should not have been invoked");
 
-        Object dummy = context.getCamelContextExtension().getBeanIntrospection().getOrElseProperty(this, "dummy", null,
+        Object dummy = PluginHelper.getBeanIntrospection(context).getOrElseProperty(this, "dummy", null,
                 false);
         assertEquals("MyDummy", dummy);
 
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
index 7b606273ce5..fc00ee33481 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
@@ -25,6 +25,7 @@ import org.apache.camel.catalog.RuntimeCamelCatalog;
 import org.apache.camel.console.DevConsoleResolver;
 import org.apache.camel.health.HealthCheckResolver;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
+import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.BeanProxyFactory;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.CamelDependencyInjectionAnnotationFactory;
@@ -516,4 +517,18 @@ public final class PluginHelper {
     public static UnitOfWorkFactory getUnitOfWorkFactory(ExtendedCamelContext extendedCamelContext) {
         return extendedCamelContext.getContextPlugin(UnitOfWorkFactory.class);
     }
+
+    /**
+     * Gets the {@link BeanIntrospection}
+     */
+    public static BeanIntrospection getBeanIntrospection(CamelContext camelContext) {
+        return getBeanIntrospection(camelContext.getCamelContextExtension());
+    }
+
+    /**
+     * Gets the {@link BeanIntrospection}
+     */
+    public static BeanIntrospection getBeanIntrospection(ExtendedCamelContext extendedCamelContext) {
+        return extendedCamelContext.getContextPlugin(BeanIntrospection.class);
+    }
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
index 22b332c5dde..67a0015688c 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
@@ -548,7 +548,7 @@ public final class PropertyBindingSupport {
             boolean ignoreCase, boolean reference, boolean optional)
             throws Exception {
 
-        BeanIntrospection bi = context.getCamelContextExtension().getBeanIntrospection();
+        final BeanIntrospection bi = PluginHelper.getBeanIntrospection(context);
 
         int pos = name.indexOf('[');
         String lookupKey = name.substring(pos + 1, name.length() - 1);
@@ -868,7 +868,7 @@ public final class PropertyBindingSupport {
             }
         }
 
-        boolean hit = context.getCamelContextExtension().getBeanIntrospection().setProperty(context,
+        boolean hit = PluginHelper.getBeanIntrospection(context).setProperty(context,
                 context.getTypeConverter(), target, name, value, refName, fluentBuilder, allowPrivateSetter, ignoreCase);
         if (!hit && mandatory) {
             // there is no setter with this given name, so lets report this as a problem
@@ -1008,7 +1008,7 @@ public final class PropertyBindingSupport {
         Object answer;
         Class<?> type = null;
 
-        final BeanIntrospection introspection = context.getCamelContextExtension().getBeanIntrospection();
+        final BeanIntrospection introspection = PluginHelper.getBeanIntrospection(context);
         answer = introspection.getOrElseProperty(target, key, null, ignoreCase);
         if (answer != null) {
             type = answer.getClass();
@@ -1148,7 +1148,8 @@ public final class PropertyBindingSupport {
             CamelContext context, Class clazz, String name,
             boolean fluentBuilder, boolean allowPrivateSetter, boolean ignoreCase) {
         // is there a direct setter?
-        Set<Method> candidates = context.getCamelContextExtension().getBeanIntrospection().findSetterMethods(clazz, name,
+        final BeanIntrospection beanIntrospection = PluginHelper.getBeanIntrospection(context);
+        Set<Method> candidates = beanIntrospection.findSetterMethods(clazz, name,
                 false, allowPrivateSetter, ignoreCase);
         if (candidates.size() == 1) {
             return candidates.iterator().next();
@@ -1156,7 +1157,7 @@ public final class PropertyBindingSupport {
 
         // okay now try with builder pattern
         if (fluentBuilder) {
-            candidates = context.getCamelContextExtension().getBeanIntrospection().findSetterMethods(clazz, name,
+            candidates = beanIntrospection.findSetterMethods(clazz, name,
                     fluentBuilder, allowPrivateSetter, ignoreCase);
             if (candidates.size() == 1) {
                 return candidates.iterator().next();
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/component/AbstractApiComponent.java b/core/camel-support/src/main/java/org/apache/camel/support/component/AbstractApiComponent.java
index 4b652578030..75d082ca2b1 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/component/AbstractApiComponent.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/component/AbstractApiComponent.java
@@ -126,7 +126,7 @@ public abstract class AbstractApiComponent<E extends Enum<E> & ApiName, T, S ext
                     }
                 }
             } else {
-                getCamelContext().getCamelContextExtension().getBeanIntrospection().getProperties(configuration,
+                PluginHelper.getBeanIntrospection(getCamelContext()).getProperties(configuration,
                         componentProperties, null, false);
             }
         }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/component/ApiMethodPropertiesHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/component/ApiMethodPropertiesHelper.java
index 12c3b602fc9..85dc639d59c 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/component/ApiMethodPropertiesHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/component/ApiMethodPropertiesHelper.java
@@ -121,7 +121,7 @@ public abstract class ApiMethodPropertiesHelper<C> {
                 }
             }
         } else {
-            context.getCamelContextExtension().getBeanIntrospection().getProperties(endpointConfiguration, properties,
+            PluginHelper.getBeanIntrospection(context).getProperties(endpointConfiguration, properties,
                     null, false);
         }
         // remove component config properties so we only have endpoint properties
@@ -178,7 +178,7 @@ public abstract class ApiMethodPropertiesHelper<C> {
                 }
             }
         } else {
-            context.getCamelContextExtension().getBeanIntrospection().getProperties(endpointConfiguration, properties,
+            PluginHelper.getBeanIntrospection(context).getProperties(endpointConfiguration, properties,
                     null, false);
         }
         if (LOG.isDebugEnabled()) {
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/management/MBeanInfoAssembler.java b/core/camel-support/src/main/java/org/apache/camel/support/management/MBeanInfoAssembler.java
index 96b1873ec32..3168f80dc5f 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/management/MBeanInfoAssembler.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/management/MBeanInfoAssembler.java
@@ -33,7 +33,6 @@ import javax.management.modelmbean.ModelMBeanNotificationInfo;
 import javax.management.modelmbean.ModelMBeanOperationInfo;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Service;
 import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedNotification;
@@ -43,6 +42,7 @@ import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.support.LRUCache;
 import org.apache.camel.support.LRUCacheFactory;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
@@ -65,8 +65,7 @@ public class MBeanInfoAssembler implements Service {
     private Map<Class<?>, MBeanAttributesAndOperations> cache;
 
     public MBeanInfoAssembler(CamelContext camelContext) {
-        ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
-        this.beanIntrospection = ecc.getBeanIntrospection();
+        this.beanIntrospection = PluginHelper.getBeanIntrospection(camelContext);
     }
 
     @Override
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeanConfiguration.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeanConfiguration.groovy
index 703b878b6d2..f3d3c903aed 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeanConfiguration.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeanConfiguration.groovy
@@ -17,6 +17,7 @@
 package org.apache.camel.dsl.groovy.common.model
 
 import org.apache.camel.CamelContext
+import org.apache.camel.support.PluginHelper
 import org.apache.camel.support.PropertyBindingSupport
 
 class BeanConfiguration {
@@ -75,8 +76,7 @@ class BeanConfiguration {
     def propertyMissing(String name) {
         def props = new HashMap<String, Object>()
 
-        context.getExtendedCamelContextToBeReplaced()
-            .getBeanIntrospection()
+        PluginHelper.getBeanIntrospection(context)
             .getProperties(target, props, null, false)
 
         return props[name]