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:50 UTC

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

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]