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]>.

Reply via email to