This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.commons.classloader-1.1.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-classloader.git
commit bbbcd5ec58a5f3a29f81ff8a30bbc78692345622 Author: Carsten Ziegeler <[email protected]> AuthorDate: Tue Nov 24 15:23:05 2009 +0000 SLING-1201 : ClassLoaderFacade should not throw runtime exceptions and handle getResources() correctly git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader@883727 13f79535-47bb-0310-9956-ffa450edef68 --- .../classloader/impl/ClassLoaderFacade.java | 25 +++++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) 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 2fbe4da..2be811b 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 @@ -20,12 +20,14 @@ package org.apache.sling.commons.classloader.impl; import java.io.IOException; import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; import java.util.Enumeration; +import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - /** * The <code>ClassLoaderFacade</code> is a facade * for the dynamic class loading. @@ -54,7 +56,8 @@ public class ClassLoaderFacade extends ClassLoader { */ public URL getResource(String name) { if ( !this.manager.isActive() ) { - throw new RuntimeException("Dynamic class loader has already been deactivated."); + logger.error("Dynamic class loader has already been deactivated."); + return null; } final ClassLoader[] loaders = manager.getDynamicClassLoaders(); for(final ClassLoader cl : loaders) { @@ -72,35 +75,41 @@ public class ClassLoaderFacade extends ClassLoader { return null; } + private final List<URL> EMPTY_LIST = Collections.emptyList(); + /** * @see java.lang.ClassLoader#getResources(java.lang.String) */ public Enumeration<URL> getResources(String name) throws IOException { if ( !this.manager.isActive() ) { - throw new RuntimeException("Dynamic class loader has already been deactivated."); + logger.error("Dynamic class loader has already been deactivated."); + return Collections.enumeration(EMPTY_LIST); } final ClassLoader[] loaders = manager.getDynamicClassLoaders(); + final List<URL> resources = new ArrayList<URL>(); for(final ClassLoader cl : loaders) { if ( cl != null ) { try { final Enumeration<URL> e = cl.getResources(name); if ( e != null && e.hasMoreElements() ) { - return e; + resources.addAll(Collections.list(e)); } } catch (Throwable t) { logger.error("Exception while querying class loader " + cl + " for resources " + name, t); } } } - return null; + return Collections.enumeration(resources); } - @Override + /** + * @see java.lang.ClassLoader#loadClass(java.lang.String, boolean) + */ protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { - if ( !this.manager.isActive() ) { - throw new RuntimeException("Dynamic class loader has already been deactivated."); + logger.error("Dynamic class loader has already been deactivated."); + throw new ClassNotFoundException("Class not found: " + name); } final ClassLoader[] loaders = manager.getDynamicClassLoaders(); for(final ClassLoader cl : loaders) { -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
