This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git
commit c29471908469aef48df3296100e0ad2c5fbd8d3d Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Dec 21 11:15:36 2023 +0100 CAMEL-20262: camel-spring-boot - Fix fatjar scan classresolver to work with SB nested JARs in fat-jar --- .../boot/FatJarPackageScanClassResolver.java | 32 ++++++++++++++++++++++ .../boot/FatJarPackageScanResourceResolver.java | 10 +++---- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/FatJarPackageScanClassResolver.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/FatJarPackageScanClassResolver.java index 0fcede943e3..63aeca3ee98 100644 --- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/FatJarPackageScanClassResolver.java +++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/FatJarPackageScanClassResolver.java @@ -18,6 +18,11 @@ package org.apache.camel.spring.boot; 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; @@ -25,6 +30,7 @@ import java.util.jar.JarInputStream; import org.apache.camel.impl.engine.DefaultPackageScanClassResolver; import org.apache.camel.util.IOHelper; +import org.apache.camel.util.StringHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,6 +52,32 @@ public class FatJarPackageScanClassResolver extends DefaultPackageScanClassResol return doLoadJarClassEntries(stream, urlPath, true, true); } + @Override + 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 e) { + // ignore + } + if (urlPath.startsWith(nested)) { + urlPath = urlPath.substring(nested.length()); + return StringHelper.before(urlPath, "!", urlPath); + } + } + + return super.parseUrlPath(url); + } + protected List<String> doLoadJarClassEntries(InputStream stream, String urlPath, boolean inspectNestedJars, boolean closeStream) { List<String> entries = new ArrayList<>(); 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 e0675813306..f661c5d3902 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 @@ -88,26 +88,25 @@ public class FatJarPackageScanResourceResolver extends DefaultPackageScanResourc return entries; } + @Override 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) { + } catch (URISyntaxException e) { + // ignore } - if (urlPath.startsWith(nested)) { urlPath = urlPath.substring(nested.length()); - return StringHelper.before(urlPath, "!", urlPath); } } @@ -131,5 +130,4 @@ public class FatJarPackageScanResourceResolver extends DefaultPackageScanResourc return name; } - }