You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/12/06 09:46:30 UTC

[camel-spring-boot] branch main updated: CAMEL-17274: camel-spring-boot - Loading resources/classes in WAR packaging is now supported. This allows Camel to load XML routes from classpath:camel/*

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


The following commit(s) were added to refs/heads/main by this push:
     new 0bf124e  CAMEL-17274: camel-spring-boot - Loading resources/classes in WAR packaging is now supported. This allows Camel to load XML routes from classpath:camel/*
0bf124e is described below

commit 0bf124e93198ea7fd5da95785751298a487e233c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Dec 6 10:45:10 2021 +0100

    CAMEL-17274: camel-spring-boot - Loading resources/classes in WAR packaging is now supported. This allows Camel to load XML routes from classpath:camel/*
---
 .../boot/FatJarPackageScanClassResolver.java       | 34 ++++++++++-----------
 .../boot/FatJarPackageScanResourceResolver.java    | 35 ++++++++++++----------
 2 files changed, 34 insertions(+), 35 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 c159487..070eb50 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
@@ -35,14 +35,9 @@ public class FatJarPackageScanClassResolver extends DefaultPackageScanClassResol
     private static final String SPRING_BOOT_CLASSIC_LIB_ROOT = "lib/";
     private static final String SPRING_BOOT_BOOT_INF_LIB_ROOT = "BOOT-INF/lib/";
     private static final String SPRING_BOOT_BOOT_INF_CLASSES_ROOT = "BOOT-INF/classes/";
+    private static final String SPRING_BOOT_WEB_INF_LIB_ROOT = "WEB-INF/lib/";
+    private static final String SPRING_BOOT_WEB_INF_CLASSES_ROOT = "WEB-INF/classes/";
 
-    /**
-     * Loads all the class entries from the main JAR and all nested jars.
-     *
-     * @param stream  the inputstream of the jar file to be examined for classes
-     * @param urlPath the url of the jar file to be examined for classes
-     * @return all the .class entries from the main JAR and all nested jars
-     */
     @Override
     protected List<String> doLoadJarClassEntries(InputStream stream, String urlPath) {
         return doLoadJarClassEntries(stream, urlPath, true, true);
@@ -59,17 +54,15 @@ public class FatJarPackageScanClassResolver extends DefaultPackageScanClassResol
             while ((entry = jarStream.getNextJarEntry()) != null) {
                 String name = entry.getName();
 
-                if (name != null) {
-                    name = name.trim();
-                    if (!entry.isDirectory() && name.endsWith(".class")) {
-                        entries.add(cleanupSpringbootClassName(name));
-                    } else if (inspectNestedJars && !entry.isDirectory() && isSpringBootNestedJar(name)) {
-                        String nestedUrl = urlPath + "!/" + name;
-                        log.trace("Inspecting nested jar: {}", nestedUrl);
+                name = name.trim();
+                if (!entry.isDirectory() && name.endsWith(".class")) {
+                    entries.add(cleanupSpringBootClassName(name));
+                } else if (inspectNestedJars && !entry.isDirectory() && isSpringBootNestedJar(name)) {
+                    String nestedUrl = urlPath + "!/" + name;
+                    log.trace("Inspecting nested jar: {}", nestedUrl);
 
-                        List<String> nestedEntries = doLoadJarClassEntries(jarStream, nestedUrl, false, false);
-                        entries.addAll(nestedEntries);
-                    }
+                    List<String> nestedEntries = doLoadJarClassEntries(jarStream, nestedUrl, false, false);
+                    entries.addAll(nestedEntries);
                 }
             }
         } catch (IOException ioe) {
@@ -86,14 +79,17 @@ public class FatJarPackageScanClassResolver extends DefaultPackageScanClassResol
 
     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));
+        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));
     }
 
-    private String cleanupSpringbootClassName(String name) {
+    private String cleanupSpringBootClassName(String name) {
         // Classes inside BOOT-INF/classes will be loaded by the new classloader as if they were in the root
         if (name.startsWith(SPRING_BOOT_BOOT_INF_CLASSES_ROOT)) {
             name = name.substring(SPRING_BOOT_BOOT_INF_CLASSES_ROOT.length());
         }
+        if (name.startsWith(SPRING_BOOT_WEB_INF_CLASSES_ROOT)) {
+            name = name.substring(SPRING_BOOT_WEB_INF_CLASSES_ROOT.length());
+        }
         return name;
     }
 
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 0a8b32c..760a1a0 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
@@ -35,6 +35,8 @@ public class FatJarPackageScanResourceResolver extends DefaultPackageScanResourc
     private static final String SPRING_BOOT_CLASSIC_LIB_ROOT = "lib/";
     private static final String SPRING_BOOT_BOOT_INF_LIB_ROOT = "BOOT-INF/lib/";
     private static final String SPRING_BOOT_BOOT_INF_CLASSES_ROOT = "BOOT-INF/classes/";
+    private static final String SPRING_BOOT_WEB_INF_LIB_ROOT = "WEB-INF/lib/";
+    private static final String SPRING_BOOT_WEB_INF_CLASSES_ROOT = "WEB-INF/classes/";
 
     @Override
     protected List<String> doLoadImplementationsInJar(String packageName, InputStream stream, String urlPath) {
@@ -55,21 +57,19 @@ public class FatJarPackageScanResourceResolver extends DefaultPackageScanResourc
             while ((entry = jarStream.getNextJarEntry()) != null) {
                 String name = entry.getName();
 
-                if (name != null) {
-                    name = name.trim();
-                    if (!entry.isDirectory() && !name.endsWith(".class")) {
-                        name = cleanupSpringbootClassName(name);
-                        // name is FQN so it must start with package name
-                        if (name.startsWith(packageName)) {
-                            entries.add(name);
-                        }
-                    } else if (inspectNestedJars && !entry.isDirectory() && isSpringBootNestedJar(name)) {
-                        String nestedUrl = urlPath + "!/" + name;
-                        log.trace("Inspecting nested jar: {}", nestedUrl);
-
-                        List<String> nestedEntries = doLoadImplementationsInJar(packageName, jarStream, nestedUrl, false, false);
-                        entries.addAll(nestedEntries);
+                name = name.trim();
+                if (!entry.isDirectory() && !name.endsWith(".class")) {
+                    name = cleanupSpringBootClassName(name);
+                    // name is FQN so it must start with package name
+                    if (name.startsWith(packageName)) {
+                        entries.add(name);
                     }
+                } else if (inspectNestedJars && !entry.isDirectory() && isSpringBootNestedJar(name)) {
+                    String nestedUrl = urlPath + "!/" + name;
+                    log.trace("Inspecting nested jar: {}", nestedUrl);
+
+                    List<String> nestedEntries = doLoadImplementationsInJar(packageName, jarStream, nestedUrl, false, false);
+                    entries.addAll(nestedEntries);
                 }
             }
         } catch (IOException ioe) {
@@ -86,14 +86,17 @@ public class FatJarPackageScanResourceResolver extends DefaultPackageScanResourc
 
     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));
+        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));
     }
 
-    private String cleanupSpringbootClassName(String name) {
+    private String cleanupSpringBootClassName(String name) {
         // Classes inside BOOT-INF/classes will be loaded by the new classloader as if they were in the root
         if (name.startsWith(SPRING_BOOT_BOOT_INF_CLASSES_ROOT)) {
             name = name.substring(SPRING_BOOT_BOOT_INF_CLASSES_ROOT.length());
         }
+        if (name.startsWith(SPRING_BOOT_WEB_INF_CLASSES_ROOT)) {
+            name = name.substring(SPRING_BOOT_WEB_INF_CLASSES_ROOT.length());
+        }
         return name;
     }