This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.commons.classloader-0.9.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-classloader.git
commit 8023ea15d1f7eab8a6291fe68bc9eb4cefd818cb Author: Carsten Ziegeler <[email protected]> AuthorDate: Thu Jul 16 05:31:50 2009 +0000 Provide parent class loader to dynamic class loader providers; check for null reference. git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader@794537 13f79535-47bb-0310-9956-ffa450edef68 --- .../classloader/DynamicClassLoaderProvider.java | 7 ++++- .../classloader/impl/ClassLoaderFacade.java | 36 +++++++++++++--------- .../impl/DynamicClassLoaderManagerImpl.java | 4 ++- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java b/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java index 04eaf8e..cdac258 100644 --- a/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java +++ b/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java @@ -29,7 +29,12 @@ public interface DynamicClassLoaderProvider { /** * Return the class loader used for dynamic class loading. + * The returned class loader should use the provided parent class loader + * as one of its parent class loaders. This ensures that the returned + * class loader has access to all dynamically loaded classes that + * are not part of this class loader. + * @param parent The parent class loader for this dynamic class loader. * @return The class loader. */ - ClassLoader getClassLoader(); + ClassLoader getClassLoader(ClassLoader parent); } diff --git a/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java b/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java index 1ef22a4..e852bd8 100644 --- a/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java +++ b/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java @@ -42,9 +42,11 @@ public class ClassLoaderFacade extends ClassLoader { public URL getResource(String name) { final ClassLoader[] loaders = manager.getDynamicClassLoaders(); for(final ClassLoader cl : loaders) { - final URL u = cl.getResource(name); - if ( u != null ) { - return u; + if ( cl != null ) { + final URL u = cl.getResource(name); + if ( u != null ) { + return u; + } } } return null; @@ -56,9 +58,11 @@ public class ClassLoaderFacade extends ClassLoader { public InputStream getResourceAsStream(String name) { final ClassLoader[] loaders = manager.getDynamicClassLoaders(); for(final ClassLoader cl : loaders) { - final InputStream i = cl.getResourceAsStream(name); - if ( i != null ) { - return i; + if ( cl != null ) { + final InputStream i = cl.getResourceAsStream(name); + if ( i != null ) { + return i; + } } } return null; @@ -70,9 +74,11 @@ public class ClassLoaderFacade extends ClassLoader { public Enumeration<URL> getResources(String name) throws IOException { final ClassLoader[] loaders = manager.getDynamicClassLoaders(); for(final ClassLoader cl : loaders) { - final Enumeration<URL> e = cl.getResources(name); - if ( e != null && e.hasMoreElements() ) { - return e; + if ( cl != null ) { + final Enumeration<URL> e = cl.getResources(name); + if ( e != null && e.hasMoreElements() ) { + return e; + } } } return null; @@ -84,11 +90,13 @@ public class ClassLoaderFacade extends ClassLoader { public Class<?> loadClass(String name) throws ClassNotFoundException { final ClassLoader[] loaders = manager.getDynamicClassLoaders(); for(final ClassLoader cl : loaders) { - try { - final Class<?> c = cl.loadClass(name); - return c; - } catch (Exception cnfe) { - // we just ignore this and try the next class loader + if ( cl != null ) { + try { + final Class<?> c = cl.loadClass(name); + return c; + } catch (Exception cnfe) { + // we just ignore this and try the next class loader + } } } throw new ClassNotFoundException("Class not found: " + name); diff --git a/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java b/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java index 2d9cc1f..2e5c6e1 100644 --- a/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java +++ b/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java @@ -89,7 +89,9 @@ public class DynamicClassLoaderManagerImpl int index = 1; for(final ServiceReference ref : refs) { final DynamicClassLoaderProvider provider = (DynamicClassLoaderProvider)this.getService(ref); - loaders[index] = provider.getClassLoader(); + if ( provider != null ) { + loaders[index] = provider.getClassLoader(this.pckAdminCL); + } index++; } // and now use new array -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
