[
https://issues.apache.org/jira/browse/CAMEL-23370?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18077181#comment-18077181
]
Vilmos Nagy commented on CAMEL-23370:
-------------------------------------
{quote}You can just specify 2+ folders separated by comma
{quote}
I’m aware of that, and it’s a reasonable workaround. However, with many Camel
routes organized across multiple directories, maintaining that list quickly
becomes cumbersome. We could reorganize all our routes, but I’d expect that
kind of breaking change in a major release - not in a patch release.
I’ve opened a PR with a proposed solution. Could you please advise on how to
properly test it so it can move forward? I’m happy to add more tests or explore
alternative approaches if you can point out what might break with the current
change.
> camel.main.routes-include-pattern with classpath:**/*.xml fails in Spring
> Boot fat JAR (works in IDE, regression since 4.11.0)
> ------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-23370
> URL: https://issues.apache.org/jira/browse/CAMEL-23370
> Project: Camel
> Issue Type: Bug
> Components: camel-spring-boot
> Affects Versions: 4.20.0
> Reporter: Vilmos Nagy
> Priority: Minor
> Fix For: 4.21.0
>
>
> *Description:*
> After upgrading to a version including Apache Camel change from CAMEL-21944,
> route discovery using wildcard patterns no longer works correctly when
> running as a Spring Boot fat JAR.
> Previously working configurations using recursive classpath scanning
> ({{{}*{*}/{*}.xml{}}}) now fail at runtime with {{{}java -jar{}}}, while
> still working when executed from IDE (exploded classpath).
> {*}This worked correctly in Camel 4.11.0, including when running via {{{}java
> -jar{}}}, and appears to be a regression in newer versions.{*}{*}{{*}}
> A minimal reproducer is available here:
> [https://github.com/vilmosnagy/camel-spring-boot-examples/tree/vilmos/poc-broken-routes-include-pattern]
> (GitHub fork of the sample project demonstrating the issue).
> ----
> *Environment:*
> * Camel version: 4.21.0-SNAPSHOT (regression compared to 4.11.0)
> * Spring Boot: 4.0.6
> * Packaging: Spring Boot fat JAR ({{{}java -jar{}}})
> * OS: Linux (reproducible)
> ----
> *Configuration:*
> {{{}application.properties{}}}:
>
> {code:java}
> camel.main.routes-include-pattern=classpath:camel/*/.xml{code}
> Project structure:
>
>
> {code:java}
> src/main/resources/
> ├── application.properties
> └── camel
> └── test-route
> └── route.xml{code}
>
> ----
> *Steps to reproduce:*
> # Create a Spring Boot + Camel application
> # Place XML routes under nested directories (e.g.
> {{{}camel/test-route/route.xml{}}})
> # Use:
> {code:java}
> camel.main.routes-include-pattern=classpath:camel/*/.xml{code}
> # Build fat JAR:
> {code:java}
> mvn clean package{code}
>
> # Run:
> {code:java}
> java -jar target/app.jar{code}
>
> ----
> *Expected behavior:*
> All XML routes under {{camel/**}} are discovered and loaded, consistent with:
> * Running from IDE
> * *Running via {{java -jar}} on Camel 4.11.0*
> ----
> *Actual behavior:*
> Application fails during startup with:
> java.io.IOException: No input stream for:
> nested:.../app.jar/!BOOT-INF/classes/!/camel/route.xml
> Stacktrace indicates failure in resource loading:
> DefaultSourceLoader.loadResource
> RoutesConfigurer.addDiscoveredRoutes
> *Important observations:*
> * Running from IDE (exploded classpath) → *works*
> * Running fat JAR ({{{}java -jar{}}}) → *fails*
> * Camel 4.11.0:
> ** IDE → *works*
> ** {{java -jar}} → *works*
> * Newer versions (incl. 4.21.0-SNAPSHOT):
> ** IDE → *works*
> ** {{java -jar}} → *fails*
> * Narrowing pattern to a single directory works:
> camel.main.routes-include-pattern=classpath:camel/test-route/*.xml
>
> but this is not viable for multiple subdirectories.
> ----
> *Suspected cause:*
> The issue appears related to changes introduced in CAMEL-21944, specifically
> replacing:
> final ResourceLoader loader =
> PluginHelper.getResourceLoader(getCamelContext());
> resources.add(loader.resolveResource(name));
> with:
> Resource resource = new PackageScanJarResource("jar", url, name);
> resources.add(resource);
> This seems to break handling of nested resources inside Spring Boot fat JARs
> ({{{}BOOT-INF/classes{}}}), particularly when using recursive glob patterns.
> ----
> *Additional notes:*
> * The failing path includes {{nested:}} URLs, suggesting incompatibility
> with Spring Boot’s nested JAR classloader.
> * Clear regression from Camel 4.11.0 behavior.
> ----
> *Workaround:*
> camel.main.routes-include-pattern=classpath:camel/test-route/*.xml
> (does not scale for multiple directories)
> ----
> *Contribution:*
> If this is confirmed to be a bug, we’re happy to help investigate further or
> contribute a fix.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)