Author: wtam
Date: Mon Aug 17 04:11:24 2009
New Revision: 804847
URL: http://svn.apache.org/viewvc?rev=804847&view=rev
Log:
[CAMEL-1917] DefaultPackageScanClassResolver not able to scan package in jar url
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=804847&r1=804846&r2=804847&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 Aug 17 04:11:24 2009
@@ -210,9 +210,12 @@
log.trace("Decoded urlPath: " + urlPath);
}
+ boolean isLocalFileSystem = "file".equals(url.getProtocol());
+
// If it's a file in a directory, trim the stupid file: spec
if (urlPath.startsWith("file:")) {
urlPath = urlPath.substring(5);
+ isLocalFileSystem = true;
}
// osgi bundles should be skipped
@@ -238,8 +241,8 @@
loadImplementationsInDirectory(test, packageName, file,
classes);
} else {
InputStream stream;
- if (urlPath.startsWith("http:")) {
- // load resources using http such as java webstart
+ if (!isLocalFileSystem) {
+ // load resources using http (and other protocols)
such as java webstart
log.debug("The current jar is accessed via http");
URL urlStream = new URL(urlPath);
URLConnection con = urlStream.openConnection();
@@ -276,6 +279,12 @@
if (log.isTraceEnabled()) {
log.trace("Getting resource URL for package: " + packageName + "
with classloader: " + loader);
}
+
+ // If the URL is a jar, the URLClassloader.getResources() seems to
require a trailing slash. The
+ // trailing slash is harmless for other URLs
+ if (!packageName.endsWith("/")) {
+ packageName = packageName + "/";
+ }
return loader.getResources(packageName);
}
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=804847&r1=804846&r2=804847&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 Aug 17 04:11:24 2009
@@ -17,6 +17,8 @@
package org.apache.camel.impl.scan;
import java.lang.annotation.Annotation;
+import java.net.URL;
+import java.net.URLClassLoader;
import java.util.HashSet;
import java.util.Set;
@@ -120,5 +122,31 @@
Set<Class> scanned = resolver.findImplementations(ScanTargetOne.class,
scanPackage);
validateMatchingSetContains(scanned, ScanTargetTwo.class);
}
+
+ public void testFindByFilterPackageInJarUrl() 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_scan_test.jar?rev=804847&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