You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2022/08/17 06:20:32 UTC
[camel-quarkus] branch main updated: Fix route inclusion / exclusion filtering
This is an automated email from the ASF dual-hosted git repository.
jamesnetherton 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 7d0e3808ff Fix route inclusion / exclusion filtering
7d0e3808ff is described below
commit 7d0e3808ffbf4c0e48655f0ac4a041050c24abc4
Author: James Netherton <ja...@gmail.com>
AuthorDate: Tue Aug 16 07:35:04 2022 +0100
Fix route inclusion / exclusion filtering
Fixes #3993
---
.../quarkus/core/deployment/CamelProcessor.java | 31 ++++++++++++--
.../core/deployment/main/CamelMainProcessor.java | 8 +++-
...inRoutesExcludeFilterCombinedPropertyTest.java} | 35 +++++++++-------
....java => CamelMainRoutesExcludeFilterTest.java} | 47 +++++++++++++++------
...inRoutesIncludeFilterCombinedPropertyTest.java} | 36 +++++++++-------
....java => CamelMainRoutesIncludeFilterTest.java} | 49 ++++++++++++++++------
.../camel/quarkus/core/RegistryRoutesLoaders.java | 9 ++++
.../camel/quarkus/main/CamelMainRecorder.java | 9 +++-
.../quarkus/main/CamelMainRoutesCollector.java | 27 +++++++++++-
9 files changed, 190 insertions(+), 61 deletions(-)
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
index 188e1982e8..ab57746e1f 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
@@ -23,6 +23,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashSet;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import java.util.TreeSet;
import java.util.function.Predicate;
@@ -76,6 +77,8 @@ import org.apache.camel.quarkus.core.deployment.util.PathFilter;
import org.apache.camel.quarkus.core.util.FileUtils;
import org.apache.camel.spi.TypeConverterLoader;
import org.apache.camel.spi.TypeConverterRegistry;
+import org.eclipse.microprofile.config.Config;
+import org.eclipse.microprofile.config.ConfigProvider;
import org.jboss.jandex.AnnotationTarget;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;
@@ -354,7 +357,7 @@ class CamelProcessor {
@BuildStep(onlyIf = { CamelConfigFlags.RoutesDiscoveryEnabled.class })
public List<CamelRoutesBuilderClassBuildItem> discoverRoutesBuilderClassNames(
CombinedIndexBuildItem combinedIndex,
- CamelConfig config,
+ CamelConfig camelConfig,
List<RoutesBuilderClassExcludeBuildItem> routesBuilderClassExcludes) {
final IndexView index = combinedIndex.getIndex();
@@ -364,13 +367,35 @@ class CamelProcessor {
allKnownImplementors.addAll(index.getAllKnownSubclasses(ROUTE_BUILDER_TYPE));
allKnownImplementors.addAll(index.getAllKnownSubclasses(ADVICE_WITH_ROUTE_BUILDER_TYPE));
+ Config config = ConfigProvider.getConfig();
+ Optional<List<String>> camelMainRoutesExclude = config.getOptionalValues("camel.main.javaRoutesExcludePattern",
+ String.class);
+ Optional<List<String>> camelMainRoutesInclude = config.getOptionalValues("camel.main.javaRoutesIncludePattern",
+ String.class);
+
+ camelMainRoutesExclude.ifPresent(excludes -> {
+ if (camelConfig.routesDiscovery.excludePatterns.isPresent()) {
+ camelConfig.routesDiscovery.excludePatterns.get().addAll(excludes);
+ } else {
+ camelConfig.routesDiscovery.excludePatterns = Optional.of(excludes);
+ }
+ });
+
+ camelMainRoutesInclude.ifPresent(includes -> {
+ if (camelConfig.routesDiscovery.includePatterns.isPresent()) {
+ camelConfig.routesDiscovery.includePatterns.get().addAll(includes);
+ } else {
+ camelConfig.routesDiscovery.includePatterns = Optional.of(includes);
+ }
+ });
+
final Predicate<DotName> pathFilter = new PathFilter.Builder()
.exclude(
routesBuilderClassExcludes.stream()
.map(RoutesBuilderClassExcludeBuildItem::getPattern)
.collect(Collectors.toList()))
- .exclude(config.routesDiscovery.excludePatterns)
- .include(config.routesDiscovery.includePatterns)
+ .exclude(camelConfig.routesDiscovery.excludePatterns)
+ .include(camelConfig.routesDiscovery.includePatterns)
.build().asDotNamePredicate();
return allKnownImplementors
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java
index 55be294e50..395043bbbd 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java
@@ -36,6 +36,7 @@ import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
import io.quarkus.runtime.RuntimeValue;
import io.quarkus.runtime.annotations.QuarkusMain;
import org.apache.camel.CamelContext;
+import org.apache.camel.main.RoutesCollector;
import org.apache.camel.quarkus.core.CamelConfig;
import org.apache.camel.quarkus.core.CamelRecorder;
import org.apache.camel.quarkus.core.CamelRuntime;
@@ -78,9 +79,12 @@ public class CamelMainProcessor {
@Record(value = ExecutionTime.STATIC_INIT, optional = true)
public CamelRoutesCollectorBuildItem routesCollector(
CamelMainRecorder recorder,
- CamelRoutesLoaderBuildItems.Registry registryRoutesLoader) {
+ CamelRoutesLoaderBuildItems.Registry registryRoutesLoader,
+ CamelConfig config) {
- return new CamelRoutesCollectorBuildItem(recorder.newRoutesCollector(registryRoutesLoader.getLoader()));
+ RuntimeValue<RoutesCollector> routesCollector = recorder.newRoutesCollector(registryRoutesLoader.getLoader(),
+ config.routesDiscovery.excludePatterns, config.routesDiscovery.includePatterns);
+ return new CamelRoutesCollectorBuildItem(routesCollector);
}
/**
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterCombinedPropertyTest.java
similarity index 72%
copy from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
copy to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterCombinedPropertyTest.java
index 8568a1ac83..9b5583d5b8 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterCombinedPropertyTest.java
@@ -19,13 +19,15 @@ package org.apache.camel.quarkus.core.deployment.main;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
+import java.util.List;
import java.util.Properties;
import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.quarkus.main.CamelMain;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -33,16 +35,17 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
-public class CamelMainRoutesFilterTest {
+public class CamelMainRoutesExcludeFilterCombinedPropertyTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addAsResource(applicationProperties(), "application.properties"));
@Inject
- CamelMain main;
+ CamelContext context;
public static Asset applicationProperties() {
Writer writer = new StringWriter();
@@ -50,7 +53,8 @@ public class CamelMainRoutesFilterTest {
Properties props = new Properties();
props.setProperty("quarkus.banner.enabled", "false");
props.setProperty("quarkus.camel.routes-discovery.enabled", "true");
- props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*Filtered");
+ props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*FilteredA");
+ props.setProperty("camel.main.javaRoutesExcludePattern", "**/*FilteredB");
try {
props.store(writer, "");
@@ -63,13 +67,9 @@ public class CamelMainRoutesFilterTest {
@Test
public void testRoutesFilter() {
- assertThat(main.configure().getRoutesBuilders())
- .hasSize(1)
- .first().isInstanceOf(MyRoute.class);
-
- assertThat(main.getCamelContext().getRoutes())
- .hasSize(1)
- .first().hasFieldOrPropertyWithValue("id", "my-route");
+ List<Route> routes = context.getRoutes();
+ assertEquals(1, routes.size());
+ assertNotNull(context.getRoute("my-route"));
}
public static class MyRoute extends RouteBuilder {
@@ -79,10 +79,17 @@ public class CamelMainRoutesFilterTest {
}
}
- public static class MyRouteFiltered extends RouteBuilder {
+ public static class MyRouteFilteredA extends RouteBuilder {
+ @Override
+ public void configure() throws Exception {
+ from("direct:filtered-a").routeId("my-route-filtered-a").to("log:filtered-a");
+ }
+ }
+
+ public static class MyRouteFilteredB extends RouteBuilder {
@Override
public void configure() throws Exception {
- from("direct:filtered").routeId("my-route-filtered").to("log:filtered");
+ from("direct:filtered-b").routeId("my-route-filtered-b").to("log:filtered-b");
}
}
}
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterTest.java
similarity index 67%
copy from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
copy to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterTest.java
index 8568a1ac83..6b932dc5e7 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterTest.java
@@ -19,13 +19,17 @@ package org.apache.camel.quarkus.core.deployment.main;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
+import java.util.List;
import java.util.Properties;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.quarkus.main.CamelMain;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -33,16 +37,17 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
-public class CamelMainRoutesFilterTest {
+public class CamelMainRoutesExcludeFilterTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addAsResource(applicationProperties(), "application.properties"));
@Inject
- CamelMain main;
+ CamelContext context;
public static Asset applicationProperties() {
Writer writer = new StringWriter();
@@ -50,7 +55,7 @@ public class CamelMainRoutesFilterTest {
Properties props = new Properties();
props.setProperty("quarkus.banner.enabled", "false");
props.setProperty("quarkus.camel.routes-discovery.enabled", "true");
- props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*Filtered");
+ props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*Filtered,**/*Bean,**/*Producer");
try {
props.store(writer, "");
@@ -63,13 +68,9 @@ public class CamelMainRoutesFilterTest {
@Test
public void testRoutesFilter() {
- assertThat(main.configure().getRoutesBuilders())
- .hasSize(1)
- .first().isInstanceOf(MyRoute.class);
-
- assertThat(main.getCamelContext().getRoutes())
- .hasSize(1)
- .first().hasFieldOrPropertyWithValue("id", "my-route");
+ List<Route> routes = context.getRoutes();
+ assertEquals(1, routes.size());
+ assertNotNull(context.getRoute("my-route"));
}
public static class MyRoute extends RouteBuilder {
@@ -85,4 +86,26 @@ public class CamelMainRoutesFilterTest {
from("direct:filtered").routeId("my-route-filtered").to("log:filtered");
}
}
+
+ @ApplicationScoped
+ public static class MyRouteBean extends RouteBuilder {
+ @Override
+ public void configure() throws Exception {
+ from("direct:filteredBean").routeId("my-route-filteredBean").to("log:filteredBean");
+ }
+ }
+
+ @ApplicationScoped
+ public static class RouteBuilderProducer {
+ @Produces
+ @ApplicationScoped
+ public RouteBuilder producedRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:produced").routeId("my-route-produced").to("log:produced");
+ }
+ };
+ }
+ }
}
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterCombinedPropertyTest.java
similarity index 69%
copy from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
copy to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterCombinedPropertyTest.java
index 8568a1ac83..264b0f4c70 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterCombinedPropertyTest.java
@@ -19,13 +19,15 @@ package org.apache.camel.quarkus.core.deployment.main;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
+import java.util.List;
import java.util.Properties;
import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.quarkus.main.CamelMain;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -33,16 +35,17 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
-public class CamelMainRoutesFilterTest {
+public class CamelMainRoutesIncludeFilterCombinedPropertyTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addAsResource(applicationProperties(), "application.properties"));
@Inject
- CamelMain main;
+ CamelContext context;
public static Asset applicationProperties() {
Writer writer = new StringWriter();
@@ -50,7 +53,8 @@ public class CamelMainRoutesFilterTest {
Properties props = new Properties();
props.setProperty("quarkus.banner.enabled", "false");
props.setProperty("quarkus.camel.routes-discovery.enabled", "true");
- props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*Filtered");
+ props.setProperty("quarkus.camel.routes-discovery.include-patterns", "**/*FilteredA");
+ props.setProperty("camel.main.javaRoutesIncludePattern", "**/*FilteredB");
try {
props.store(writer, "");
@@ -63,13 +67,10 @@ public class CamelMainRoutesFilterTest {
@Test
public void testRoutesFilter() {
- assertThat(main.configure().getRoutesBuilders())
- .hasSize(1)
- .first().isInstanceOf(MyRoute.class);
-
- assertThat(main.getCamelContext().getRoutes())
- .hasSize(1)
- .first().hasFieldOrPropertyWithValue("id", "my-route");
+ List<Route> routes = context.getRoutes();
+ assertEquals(2, routes.size());
+ assertNotNull(context.getRoute("my-route-filtered-a"));
+ assertNotNull(context.getRoute("my-route-filtered-b"));
}
public static class MyRoute extends RouteBuilder {
@@ -79,10 +80,17 @@ public class CamelMainRoutesFilterTest {
}
}
- public static class MyRouteFiltered extends RouteBuilder {
+ public static class MyRouteFilteredA extends RouteBuilder {
+ @Override
+ public void configure() throws Exception {
+ from("direct:filtered-a").routeId("my-route-filtered-a").to("log:filtered-a");
+ }
+ }
+
+ public static class MyRouteFilteredB extends RouteBuilder {
@Override
public void configure() throws Exception {
- from("direct:filtered").routeId("my-route-filtered").to("log:filtered");
+ from("direct:filtered-b").routeId("my-route-filtered-b").to("log:filtered-b");
}
}
}
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterTest.java
similarity index 64%
rename from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
rename to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterTest.java
index 8568a1ac83..849d09289b 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterTest.java
@@ -19,13 +19,17 @@ package org.apache.camel.quarkus.core.deployment.main;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
+import java.util.List;
import java.util.Properties;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.quarkus.main.CamelMain;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -33,16 +37,17 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
-public class CamelMainRoutesFilterTest {
+public class CamelMainRoutesIncludeFilterTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addAsResource(applicationProperties(), "application.properties"));
@Inject
- CamelMain main;
+ CamelContext context;
public static Asset applicationProperties() {
Writer writer = new StringWriter();
@@ -50,7 +55,7 @@ public class CamelMainRoutesFilterTest {
Properties props = new Properties();
props.setProperty("quarkus.banner.enabled", "false");
props.setProperty("quarkus.camel.routes-discovery.enabled", "true");
- props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*Filtered");
+ props.setProperty("quarkus.camel.routes-discovery.include-patterns", "**/*Filtered");
try {
props.store(writer, "");
@@ -63,13 +68,11 @@ public class CamelMainRoutesFilterTest {
@Test
public void testRoutesFilter() {
- assertThat(main.configure().getRoutesBuilders())
- .hasSize(1)
- .first().isInstanceOf(MyRoute.class);
-
- assertThat(main.getCamelContext().getRoutes())
- .hasSize(1)
- .first().hasFieldOrPropertyWithValue("id", "my-route");
+ List<Route> routes = context.getRoutes();
+ assertEquals(3, routes.size());
+ assertNotNull(context.getRoute("my-route-filtered"));
+ assertNotNull(context.getRoute("my-route-filteredBean"));
+ assertNotNull(context.getRoute("my-route-filteredProduced"));
}
public static class MyRoute extends RouteBuilder {
@@ -85,4 +88,26 @@ public class CamelMainRoutesFilterTest {
from("direct:filtered").routeId("my-route-filtered").to("log:filtered");
}
}
+
+ @ApplicationScoped
+ public static class MyRouteBeanFiltered extends RouteBuilder {
+ @Override
+ public void configure() throws Exception {
+ from("direct:filteredBean").routeId("my-route-filteredBean").to("log:filteredBean");
+ }
+ }
+
+ @ApplicationScoped
+ public static class RouteBuilderProducerFiltered {
+ @Produces
+ @ApplicationScoped
+ public RouteBuilder producedRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:produced").routeId("my-route-filteredProduced").to("log:produced");
+ }
+ };
+ }
+ }
}
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java
index b70c73d5e1..f211459b9e 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java
@@ -88,6 +88,15 @@ public final class RegistryRoutesLoaders {
boolean abs = Modifier.isAbstract(routesBuilder.getClass().getModifiers());
if (!abs) {
String name = routesBuilder.getClass().getName();
+
+ // make it possible to exclude classes with RouteBuilder producer methods
+ if (name.contains("_ProducerMethod")) {
+ name = name.substring(0, name.indexOf("_ProducerMethod"));
+ }
+
+ // strip out extraneous naming generated by Quarkus ArC
+ name = name.replace("_ClientProxy", "");
+
// make name as path so we can use ant path matcher
name = name.replace('.', '/');
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
index 55e765102d..0e3b223a68 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
@@ -17,6 +17,7 @@
package org.apache.camel.quarkus.main;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import io.quarkus.arc.runtime.BeanContainer;
@@ -69,8 +70,12 @@ public class CamelMainRecorder {
main.getValue().addMainListener(listener.getValue());
}
- public RuntimeValue<RoutesCollector> newRoutesCollector(RuntimeValue<RegistryRoutesLoader> registryRoutesLoader) {
- return new RuntimeValue<>(new CamelMainRoutesCollector(registryRoutesLoader.getValue()));
+ public RuntimeValue<RoutesCollector> newRoutesCollector(
+ RuntimeValue<RegistryRoutesLoader> registryRoutesLoader,
+ Optional<List<String>> excludePatterns,
+ Optional<List<String>> includePatterns) {
+ return new RuntimeValue<>(
+ new CamelMainRoutesCollector(registryRoutesLoader.getValue(), excludePatterns, includePatterns));
}
public void customizeContext(RuntimeValue<CamelMain> main, List<RuntimeValue<CamelContextCustomizer>> contextCustomizers) {
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java
index 8595f531d0..44d86a0f8a 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java
@@ -17,6 +17,7 @@
package org.apache.camel.quarkus.main;
import java.util.List;
+import java.util.Optional;
import org.apache.camel.CamelContext;
import org.apache.camel.RoutesBuilder;
@@ -25,9 +26,16 @@ import org.apache.camel.quarkus.core.RegistryRoutesLoader;
public class CamelMainRoutesCollector extends DefaultRoutesCollector {
private final RegistryRoutesLoader registryRoutesLoader;
+ private final Optional<List<String>> excludePatterns;
+ private final Optional<List<String>> includePatterns;
- public CamelMainRoutesCollector(RegistryRoutesLoader registryRoutesLoader) {
+ public CamelMainRoutesCollector(
+ RegistryRoutesLoader registryRoutesLoader,
+ Optional<List<String>> excludePatterns,
+ Optional<List<String>> includePatterns) {
this.registryRoutesLoader = registryRoutesLoader;
+ this.excludePatterns = excludePatterns;
+ this.includePatterns = includePatterns;
}
public RegistryRoutesLoader getRegistryRoutesLoader() {
@@ -40,6 +48,21 @@ public class CamelMainRoutesCollector extends DefaultRoutesCollector {
String excludePattern,
String includePattern) {
- return registryRoutesLoader.collectRoutesFromRegistry(camelContext, excludePattern, includePattern);
+ /**
+ * The incoming excludePattern & includePattern are ignored since they are provided from camel-main via:
+ *
+ * camel.main.javaRoutesExcludePattern
+ * camel.main.javaRoutesIncludePattern
+ *
+ * The values for those properties are combined with the quarkus.camel.routes-discovery equivalents at build time.
+ */
+ return registryRoutesLoader.collectRoutesFromRegistry(
+ camelContext,
+ getPatternString(excludePatterns),
+ getPatternString(includePatterns));
+ }
+
+ private String getPatternString(Optional<List<String>> camelQuarkusPatterns) {
+ return camelQuarkusPatterns.map(patterns -> String.join(",", patterns)).orElse(null);
}
}