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

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


The following commit(s) were added to refs/heads/main by this push:
     new fec2c11  Fix #3553 make beans of InterceptStrategy unremovable (#3593)
fec2c11 is described below

commit fec2c11ef3f71e9fa9fea7c40b42aa3ecd97dde4
Author: Amos Feng <[email protected]>
AuthorDate: Tue Mar 8 19:38:41 2022 +0800

    Fix #3553 make beans of InterceptStrategy unremovable (#3593)
---
 .../deployment/CamelUnremovableBeansProcessor.java | 25 ++++++++++++++++++++++
 .../core/runtime/CamelBeansUnremovableTest.java    | 25 ++++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git 
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelUnremovableBeansProcessor.java
 
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelUnremovableBeansProcessor.java
index 385a404..e3c2d72 100644
--- 
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelUnremovableBeansProcessor.java
+++ 
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelUnremovableBeansProcessor.java
@@ -30,11 +30,13 @@ import 
org.apache.camel.quarkus.core.deployment.catalog.BuildTimeCamelCatalog;
 import 
org.apache.camel.quarkus.core.deployment.catalog.BuildTimeJsonSchemaResolver;
 import org.apache.camel.quarkus.core.deployment.catalog.SchemaResource;
 import 
org.apache.camel.quarkus.core.deployment.spi.BuildTimeCamelCatalogBuildItem;
+import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.spi.annotations.Dataformat;
 import org.apache.camel.spi.annotations.Language;
 import org.apache.camel.tooling.model.BaseOptionModel;
 import org.jboss.jandex.AnnotationInstance;
+import org.jboss.jandex.ClassInfo;
 import org.jboss.jandex.DotName;
 import org.jboss.jandex.IndexView;
 import org.slf4j.Logger;
@@ -50,6 +52,10 @@ public class CamelUnremovableBeansProcessor {
             DotName.createSimple(Language.class.getName())
     };
 
+    private static final DotName[] OPTIONAL_SERVICE_TYPES = {
+            DotName.createSimple(InterceptStrategy.class.getName())
+    };
+
     @BuildStep
     BuildTimeCamelCatalogBuildItem 
buildTimeCamelCatalog(CombinedIndexBuildItem combinedIndex) {
         Set<SchemaResource> resources = new HashSet<>();
@@ -91,4 +97,23 @@ public class CamelUnremovableBeansProcessor {
 
         return UnremovableBeanBuildItem.beanTypes(unremovableClasses);
     }
+
+    @BuildStep
+    UnremovableBeanBuildItem 
unremovableOptionalServices(CombinedIndexBuildItem combinedIndex) {
+        IndexView index = combinedIndex.getIndex();
+
+        Set<DotName> unremovableClasses = Stream.of(OPTIONAL_SERVICE_TYPES)
+                .map(index::getAllKnownImplementors)
+                .flatMap(Collection::stream)
+                .map(ClassInfo::name)
+                .collect(Collectors.toSet());
+
+        if (LOGGER.isDebugEnabled()) {
+            unremovableClasses.stream().forEach(
+                    unremovableClass -> LOGGER.debug("Registering optional 
service unremovable bean class: {}",
+                            unremovableClass));
+        }
+
+        return UnremovableBeanBuildItem.beanTypes(unremovableClasses);
+    }
 }
diff --git 
a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelBeansUnremovableTest.java
 
b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelBeansUnremovableTest.java
index ebf1645..fdb8e11 100644
--- 
a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelBeansUnremovableTest.java
+++ 
b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelBeansUnremovableTest.java
@@ -25,6 +25,9 @@ import javax.inject.Singleton;
 
 import io.quarkus.test.QuarkusUnitTest;
 import org.apache.camel.CamelContext;
+import org.apache.camel.NamedNode;
+import org.apache.camel.Processor;
+import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.spi.annotations.Dataformat;
@@ -76,6 +79,14 @@ public class CamelBeansUnremovableTest {
     }
 
     @Test
+    public void testInterceptStrategyUnremovable() {
+        Registry registry = context.getRegistry();
+        Set<UnremovableInterceptStrategy> unremovableInterceptStrategies = 
registry
+                .findByType(UnremovableInterceptStrategy.class);
+        Assertions.assertEquals(1, unremovableInterceptStrategies.size());
+    }
+
+    @Test
     public void testNonUnremovableBeansRemoved() {
         Registry registry = context.getRegistry();
         Set<Exception> nonUnremovableBeans = 
registry.findByType(Exception.class);
@@ -94,6 +105,14 @@ public class CamelBeansUnremovableTest {
     static final class UnremovableLanguageBean {
     }
 
+    static final class UnremovableInterceptStrategy implements 
InterceptStrategy {
+        @Override
+        public Processor wrapProcessorInInterceptors(CamelContext context, 
NamedNode definition, Processor target,
+                Processor nextTarget) throws Exception {
+            return target;
+        }
+    }
+
     @ApplicationScoped
     static final class BeanProducers {
 
@@ -123,6 +142,12 @@ public class CamelBeansUnremovableTest {
 
         @Singleton
         @Produces
+        public UnremovableInterceptStrategy unremovableInterceptStrategy() {
+            return new UnremovableInterceptStrategy();
+        }
+
+        @Singleton
+        @Produces
         public Exception removableBean() {
             return new Exception("java.lang types should not be auto added as 
unremovable");
         }

Reply via email to