From c2413d212d1a84155716358d18de9d91ed4bd19c Mon Sep 17 00:00:00 2001 From: Croway Date: Thu, 30 Nov 2023 16:59:11 +0100 Subject: [PATCH] CAMEL-20148: Discover resources on classpath --- .../FatJarPackageScanResourceResolver.java | 33 +++++++++++++++++++ .../src/test/resources/BOOT-MANIFEST.MF | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/FatJarPackageScanResourceResolver.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/FatJarPackageScanResourceResolver.java index 3d68a356a42..e0675813306 100644 --- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/FatJarPackageScanResourceResolver.java +++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/FatJarPackageScanResourceResolver.java @@ -18,11 +18,17 @@ import org.apache.camel.impl.engine.DefaultPackageScanResourceResolver; import org.apache.camel.util.IOHelper; +import org.apache.camel.util.StringHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.InputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.jar.JarEntry; @@ -82,6 +88,33 @@ protected List doLoadImplementationsInJar(String packageName, InputStrea return entries; } + protected String parseUrlPath(URL url) { + String urlPath = url.getFile(); + urlPath = URLDecoder.decode(urlPath, StandardCharsets.UTF_8); + if (LOG.isTraceEnabled()) { + LOG.trace("Decoded urlPath: {} with protocol: {}", urlPath, url.getProtocol()); + } + + String nested = "nested:"; + + if (urlPath.startsWith(nested)) { + try { + urlPath = (new URI(url.getFile())).getPath(); + + return StringHelper.before(urlPath, "!", urlPath); + } catch (URISyntaxException var4) { + } + + if (urlPath.startsWith(nested)) { + urlPath = urlPath.substring(nested.length()); + + return StringHelper.before(urlPath, "!", urlPath); + } + } + + return super.parseUrlPath(url); + } + private boolean isSpringBootNestedJar(String name) { // Supporting both versions of the packaging model return name.endsWith(".jar") && (name.startsWith(SPRING_BOOT_CLASSIC_LIB_ROOT) || name.startsWith(SPRING_BOOT_BOOT_INF_LIB_ROOT) || name.startsWith(SPRING_BOOT_WEB_INF_LIB_ROOT)); diff --git a/tests/camel-itest-spring-boot/src/test/resources/BOOT-MANIFEST.MF b/tests/camel-itest-spring-boot/src/test/resources/BOOT-MANIFEST.MF index b8f139f8b7a..5efe7e8ecf3 100644 --- a/tests/camel-itest-spring-boot/src/test/resources/BOOT-MANIFEST.MF +++ b/tests/camel-itest-spring-boot/src/test/resources/BOOT-MANIFEST.MF @@ -1,3 +1,3 @@ Manifest-Version: 1.0 -Main-Class: org.springframework.boot.loader.JarLauncher +Main-Class: org.springframework.boot.loader.launch.JarLauncher Start-Class: org.apache.camel.itest.springboot.ITestApplication