This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit e713eee9ff2477cef9f50f176639b8f2c7fd6d47
Author: Otavio Rodolfo Piske <angusyo...@gmail.com>
AuthorDate: Mon Jun 12 14:08:01 2023 +0200

    (chores) camel-base-engine: cleanup duplicated code in package scan 
resolvers
---
 .../camel/impl/engine/BasePackageScanResolver.java | 61 ++++++++++++++++++++++
 .../engine/DefaultPackageScanClassResolver.java    | 53 ++-----------------
 .../engine/DefaultPackageScanResourceResolver.java | 53 ++-----------------
 3 files changed, 69 insertions(+), 98 deletions(-)

diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BasePackageScanResolver.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BasePackageScanResolver.java
index cf5a8893fc8..7d703de948c 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BasePackageScanResolver.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BasePackageScanResolver.java
@@ -17,7 +17,11 @@
 package org.apache.camel.impl.engine;
 
 import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.LinkedHashSet;
@@ -139,4 +143,61 @@ public abstract class BasePackageScanResolver extends 
ServiceSupport implements
         return loader.getResources(packageName);
     }
 
+    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());
+        }
+
+        // If it's a file in a directory, trim the stupid file: spec
+        if (urlPath.startsWith("file:")) {
+            // file path can be temporary folder which uses characters that 
the URLDecoder decodes wrong
+            // for example + being decoded to something else (+ can be used in 
temp folders on Mac OS)
+            // to remedy this then create new path without using the URLDecoder
+            try {
+                urlPath = new URI(url.getFile()).getPath();
+            } catch (URISyntaxException e) {
+                // fallback to use as it was given from the URLDecoder
+                // this allows us to work on Windows if users have spaces in 
paths
+            }
+
+            if (urlPath.startsWith("file:")) {
+                urlPath = urlPath.substring(5);
+            }
+        }
+
+        // osgi bundles should be skipped
+        if (url.toString().startsWith("bundle:") || 
urlPath.startsWith("bundle:")) {
+            log.trace("Skipping OSGi bundle: {}", url);
+            return null;
+        }
+
+        // bundle resource should be skipped
+        if (url.toString().startsWith("bundleresource:") || 
urlPath.startsWith("bundleresource:")) {
+            log.trace("Skipping bundleresource: {}", url);
+            return null;
+        }
+
+        // Else it's in a JAR, grab the path to the jar
+        if (urlPath.indexOf('!') > 0) {
+            urlPath = urlPath.substring(0, urlPath.indexOf('!'));
+        }
+        return urlPath;
+    }
+
+    protected Enumeration<URL> getUrls(String packageName, ClassLoader loader) 
{
+        Enumeration<URL> urls;
+        try {
+            urls = getResources(loader, packageName);
+            if (!urls.hasMoreElements()) {
+                log.trace("No URLs returned by classloader");
+            }
+        } catch (IOException ioe) {
+            log.warn("Cannot read package: {}", packageName, ioe);
+            return null;
+        }
+        return urls;
+    }
+
 }
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanClassResolver.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanClassResolver.java
index f1d95ebda10..e5027274903 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanClassResolver.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanClassResolver.java
@@ -21,12 +21,8 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.annotation.Annotation;
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLConnection;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -168,14 +164,8 @@ public class DefaultPackageScanClassResolver extends 
BasePackageScanResolver
                     test, packageName, loader.getClass().getName());
         }
 
-        Enumeration<URL> urls;
-        try {
-            urls = getResources(loader, packageName);
-            if (!urls.hasMoreElements()) {
-                log.trace("No URLs returned by classloader");
-            }
-        } catch (IOException ioe) {
-            log.warn("Cannot read package: {}", packageName, ioe);
+        Enumeration<URL> urls = getUrls(packageName, loader);
+        if (urls == null) {
             return;
         }
 
@@ -187,46 +177,11 @@ public class DefaultPackageScanClassResolver extends 
BasePackageScanResolver
 
                 url = customResourceLocator(url);
 
-                String urlPath = url.getFile();
-                urlPath = URLDecoder.decode(urlPath, StandardCharsets.UTF_8);
-                if (log.isTraceEnabled()) {
-                    log.trace("Decoded urlPath: {} with protocol: {}", 
urlPath, url.getProtocol());
-                }
-
-                // If it's a file in a directory, trim the stupid file: spec
-                if (urlPath.startsWith("file:")) {
-                    // file path can be temporary folder which uses characters 
that the URLDecoder decodes wrong
-                    // for example + being decoded to something else (+ can be 
used in temp folders on Mac OS)
-                    // to remedy this then create new path without using the 
URLDecoder
-                    try {
-                        urlPath = new URI(url.getFile()).getPath();
-                    } catch (URISyntaxException e) {
-                        // fallback to use as it was given from the URLDecoder
-                        // this allows us to work on Windows if users have 
spaces in paths
-                    }
-
-                    if (urlPath.startsWith("file:")) {
-                        urlPath = urlPath.substring(5);
-                    }
-                }
-
-                // osgi bundles should be skipped
-                if (url.toString().startsWith("bundle:") || 
urlPath.startsWith("bundle:")) {
-                    log.trace("Skipping OSGi bundle: {}", url);
-                    continue;
-                }
-
-                // bundle resource should be skipped
-                if (url.toString().startsWith("bundleresource:") || 
urlPath.startsWith("bundleresource:")) {
-                    log.trace("Skipping bundleresource: {}", url);
+                String urlPath = parseUrlPath(url);
+                if (urlPath == null) {
                     continue;
                 }
 
-                // Else it's in a JAR, grab the path to the jar
-                if (urlPath.indexOf('!') > 0) {
-                    urlPath = urlPath.substring(0, urlPath.indexOf('!'));
-                }
-
                 log.trace("Scanning for classes in: {} matching criteria: {}", 
urlPath, test);
 
                 File file = new File(urlPath);
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java
index cfcda0f5d0b..6fa8a18eaf9 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java
@@ -21,12 +21,8 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLConnection;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -129,14 +125,8 @@ public class DefaultPackageScanResourceResolver extends 
BasePackageScanResolver
             Set<Resource> resources,
             String subPattern) {
 
-        Enumeration<URL> urls;
-        try {
-            urls = getResources(classLoader, packageName);
-            if (!urls.hasMoreElements()) {
-                log.trace("No URLs returned by classloader");
-            }
-        } catch (IOException ioe) {
-            log.warn("Cannot read package: {}", packageName, ioe);
+        Enumeration<URL> urls = getUrls(packageName, classLoader);
+        if (urls == null) {
             return;
         }
 
@@ -148,46 +138,11 @@ public class DefaultPackageScanResourceResolver extends 
BasePackageScanResolver
 
                 url = customResourceLocator(url);
 
-                String urlPath = url.getFile();
-                urlPath = URLDecoder.decode(urlPath, StandardCharsets.UTF_8);
-                if (log.isTraceEnabled()) {
-                    log.trace("Decoded urlPath: {} with protocol: {}", 
urlPath, url.getProtocol());
-                }
-
-                // If it's a file in a directory, trim the stupid file: spec
-                if (urlPath.startsWith("file:")) {
-                    // file path can be temporary folder which uses characters 
that the URLDecoder decodes wrong
-                    // for example + being decoded to something else (+ can be 
used in temp folders on Mac OS)
-                    // to remedy this then create new path without using the 
URLDecoder
-                    try {
-                        urlPath = new URI(url.getFile()).getPath();
-                    } catch (URISyntaxException e) {
-                        // fallback to use as it was given from the URLDecoder
-                        // this allows us to work on Windows if users have 
spaces in paths
-                    }
-
-                    if (urlPath.startsWith("file:")) {
-                        urlPath = urlPath.substring(5);
-                    }
-                }
-
-                // osgi bundles should be skipped
-                if (url.toString().startsWith("bundle:") || 
urlPath.startsWith("bundle:")) {
-                    log.trace("Skipping OSGi bundle: {}", url);
+                String urlPath = parseUrlPath(url);
+                if (urlPath == null) {
                     continue;
                 }
 
-                // bundle resource should be skipped
-                if (url.toString().startsWith("bundleresource:") || 
urlPath.startsWith("bundleresource:")) {
-                    log.trace("Skipping bundleresource: {}", url);
-                    continue;
-                }
-
-                // Else it's in a JAR, grab the path to the jar
-                if (urlPath.indexOf('!') > 0) {
-                    urlPath = urlPath.substring(0, urlPath.indexOf('!'));
-                }
-
                 log.trace("Scanning for resources in: {} matching pattern: 
{}", urlPath, subPattern);
 
                 File file = new File(urlPath);

Reply via email to