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.git
The following commit(s) were added to refs/heads/main by this push:
new 05aded367939 CAMEL-22739: Avoid duplicate route resource loading with
overlapping wildcard routes-include patterns
05aded367939 is described below
commit 05aded367939da325a43ebdf2c4abd3e413792f2
Author: James Netherton <[email protected]>
AuthorDate: Fri Nov 28 13:54:20 2025 +0000
CAMEL-22739: Avoid duplicate route resource loading with overlapping
wildcard routes-include patterns
---
.../apache/camel/main/DefaultRoutesCollector.java | 3 +-
.../org/apache/camel/dsl/xml/io/XmlMainTest.java | 51 +++++++++++++---------
2 files changed, 32 insertions(+), 22 deletions(-)
diff --git
a/core/camel-main/src/main/java/org/apache/camel/main/DefaultRoutesCollector.java
b/core/camel-main/src/main/java/org/apache/camel/main/DefaultRoutesCollector.java
index a490f9f913e7..ad95a247e0e3 100644
---
a/core/camel-main/src/main/java/org/apache/camel/main/DefaultRoutesCollector.java
+++
b/core/camel-main/src/main/java/org/apache/camel/main/DefaultRoutesCollector.java
@@ -19,6 +19,7 @@ package org.apache.camel.main;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.StringJoiner;
@@ -240,7 +241,7 @@ public class DefaultRoutesCollector implements
RoutesCollector {
return new ArrayList<>();
}
- Collection<Resource> accepted = new ArrayList<>();
+ Collection<Resource> accepted = new LinkedHashSet<>();
for (String include : includes) {
if (include.endsWith("?optional=true")) {
include = include.substring(0, include.length() - 14);
diff --git
a/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainTest.java
b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainTest.java
index 19110c3b56b2..0c54de8fbac0 100644
---
a/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainTest.java
+++
b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlMainTest.java
@@ -95,29 +95,38 @@ public class XmlMainTest {
null);
}
+ @Test
+ public void testMainRoutesCollectorWithOverlappingWildcardPaths() throws
Exception {
+ doTestMain(
+
"classpath:org/apache/camel/main/*dummy.xml,classpath:org/apache/camel/main/*scan.xml,classpath:org/apache/camel/main/xml/*dummy.xml
classpath:org/apache/camel/main/xml/*scan.xml",
+ null);
+ }
+
protected void doTestMain(String includes, String excludes) throws
Exception {
Main main = new Main();
- main.bind("restConsumerFactory", new MockRestConsumerFactory());
- main.configure().withRoutesIncludePattern(includes);
- main.configure().withRoutesExcludePattern(excludes);
- main.start();
-
- CamelContext camelContext = main.getCamelContext();
- assertNotNull(camelContext);
- assertEquals(2, camelContext.getRoutes().size());
-
- MockEndpoint endpoint = camelContext.getEndpoint("mock:scan",
MockEndpoint.class);
- endpoint.expectedBodiesReceived("Hello World");
- MockEndpoint endpoint2 = camelContext.getEndpoint("mock:dummy",
MockEndpoint.class);
- endpoint2.expectedBodiesReceived("Bye World");
-
- main.getCamelTemplate().sendBody("direct:scan", "Hello World");
- main.getCamelTemplate().sendBody("direct:dummy", "Bye World");
-
- endpoint.assertIsSatisfied();
- endpoint2.assertIsSatisfied();
-
- main.stop();
+ try {
+ main.bind("restConsumerFactory", new MockRestConsumerFactory());
+ main.configure().withRoutesIncludePattern(includes);
+ main.configure().withRoutesExcludePattern(excludes);
+ main.start();
+
+ CamelContext camelContext = main.getCamelContext();
+ assertNotNull(camelContext);
+ assertEquals(2, camelContext.getRoutes().size());
+
+ MockEndpoint endpoint = camelContext.getEndpoint("mock:scan",
MockEndpoint.class);
+ endpoint.expectedBodiesReceived("Hello World");
+ MockEndpoint endpoint2 = camelContext.getEndpoint("mock:dummy",
MockEndpoint.class);
+ endpoint2.expectedBodiesReceived("Bye World");
+
+ main.getCamelTemplate().sendBody("direct:scan", "Hello World");
+ main.getCamelTemplate().sendBody("direct:dummy", "Bye World");
+
+ endpoint.assertIsSatisfied();
+ endpoint2.assertIsSatisfied();
+ } finally {
+ main.stop();
+ }
}
}