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 2009/09/14 08:57:29 UTC

svn commit: r814499 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/impl/DefaultPackageScanClassResolver.java test/java/org/apache/camel/impl/scan/DefaultPackageScanClassResolverTest.java test/resources/package+scan+test.jar

Author: davsclaus
Date: Mon Sep 14 06:57:29 2009
New Revision: 814499

URL: http://svn.apache.org/viewvc?rev=814499&view=rev
Log:
CAMEL-1974: Fixed package scanning with temp folders using characters which would have been url decoded. Thanks to Fabio Marinelli for providing details and fix.

Added:
    camel/trunk/camel-core/src/test/resources/package+scan+test.jar   (with props)
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultPackageScanClassResolver.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/impl/scan/DefaultPackageScanClassResolverTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultPackageScanClassResolver.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultPackageScanClassResolver.java?rev=814499&r1=814498&r2=814499&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultPackageScanClassResolver.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultPackageScanClassResolver.java Mon Sep 14 06:57:29 2009
@@ -21,6 +21,8 @@
 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;
@@ -214,7 +216,14 @@
 
                 // If it's a file in a directory, trim the stupid file: spec
                 if (urlPath.startsWith("file:")) {
-                    urlPath = urlPath.substring(5);
+                    // 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
+                    urlPath = new URI(url.getFile()).getPath();
+
+                    if (urlPath.startsWith("file:")) {
+                        urlPath = urlPath.substring(5);
+                    }
                     isLocalFileSystem = true;
                 }
 
@@ -258,8 +267,10 @@
                     }
                     loadImplementationsInJar(test, packageName, stream, urlPath, classes);
                 }
-            } catch (IOException ioe) {
-                log.warn("Could not read entries in url: " + url, ioe);
+            } catch (IOException e) {
+                log.warn("Could not read entries in url: " + url, e);
+            } catch (URISyntaxException e) {
+                log.warn("Could not read entries in url: " + url, e);
             }
         }
     }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/scan/DefaultPackageScanClassResolverTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/scan/DefaultPackageScanClassResolverTest.java?rev=814499&r1=814498&r2=814499&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/scan/DefaultPackageScanClassResolverTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/scan/DefaultPackageScanClassResolverTest.java Mon Sep 14 06:57:29 2009
@@ -124,8 +124,7 @@
     }
     
     public void testFindByFilterPackageInJarUrl() throws Exception {
-        
-        ClassLoader savedClassLoader = null; 
+        ClassLoader savedClassLoader = null;
         try {
             savedClassLoader = Thread.currentThread().getContextClassLoader();
             URL url = getClass().getResource("/package_scan_test.jar");
@@ -145,8 +144,29 @@
                 Thread.currentThread().setContextClassLoader(savedClassLoader);
             } 
         }
-
     }
     
+    public void testFindByFilterPackageInJarUrlWithPlusChars() throws Exception {
+        ClassLoader savedClassLoader = null;
+        try {
+            savedClassLoader = Thread.currentThread().getContextClassLoader();
+            URL url = getClass().getResource("/package+scan+test.jar");
+
+            URL urls[] = {new URL("jar:" + url.toString() + "!/")};
+            URLClassLoader classLoader = new URLClassLoader(urls, savedClassLoader);
+
+            Thread.currentThread().setContextClassLoader(classLoader);
+
+            filter.addIncludePattern("a.*.c.*");
+            resolver.addFilter(filter);
+            Set<Class> scanned = resolver.findByFilter(filter, "a.b.c");
+            assertEquals(1, scanned.size());
+            assertEquals("class a.b.c.Test", scanned.iterator().next().toString());
+        } finally {
+            if (savedClassLoader != null) {
+                Thread.currentThread().setContextClassLoader(savedClassLoader);
+            }
+        }
+    }
 
 }

Added: camel/trunk/camel-core/src/test/resources/package+scan+test.jar
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/resources/package%2Bscan%2Btest.jar?rev=814499&view=auto
==============================================================================
Binary file - no diff available.

Propchange: camel/trunk/camel-core/src/test/resources/package+scan+test.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream