[
https://issues.apache.org/jira/browse/CAMEL-23370?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Vilmos Nagy updated CAMEL-23370:
--------------------------------
Description:
*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.
was:
*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{}}}:
camel.main.routes-include-pattern=classpath:camel/**/*.xml
Project structure:
src/main/resources/
├── application.properties
└── camel
└── test-route
└── route.xml
----
*Steps to reproduce:*
# Create a Spring Boot + Camel application
# Place XML routes under nested directories (e.g.
{{{}camel/test-route/route.xml{}}})
# Use:
camel.main.routes-include-pattern=classpath:camel/**/*.xml
# Build fat JAR:
mvn clean package
# Run:
java -jar target/app.jar
----
*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.
> 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
> Affects Versions: 4.20.0
> Reporter: Vilmos Nagy
> Priority: Minor
>
> *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)