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();
+        }
     }
 
 }

Reply via email to