This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch 2.7.x in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit a26fc80be60ae513407c7b23784aa3c54c859224 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"); }
