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 2ffcc20270360a1a71c28c4cf31604808f04bbf1
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Mon Oct 12 13:24:36 2009 +0000

    SLING-1145 :   Exceptions from dynamic class loader providers should be 
catched
    
    git-svn-id: 
https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader@824328 
13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            |  4 +++
 .../classloader/impl/ClassLoaderFacade.java        | 36 +++++++++++++++++-----
 2 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/pom.xml b/pom.xml
index 7234371..e7a7bdb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,5 +103,9 @@
             <groupId>org.jmock</groupId>
             <artifactId>jmock-junit4</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+        </dependency>
     </dependencies>
 </project>
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 e8e7426..2fbe4da 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
@@ -22,6 +22,9 @@ import java.io.IOException;
 import java.net.URL;
 import java.util.Enumeration;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 
 /**
  * The <code>ClassLoaderFacade</code> is a facade
@@ -33,8 +36,15 @@ import java.util.Enumeration;
  */
 public class ClassLoaderFacade extends ClassLoader {
 
+    /** The logger. */
+    private final Logger logger = 
LoggerFactory.getLogger(this.getClass().getName());
+
+    /** Dynamic class loader manager which manages the dynamic class loader 
providers for this facade. */
     private final DynamicClassLoaderManagerImpl manager;
 
+    /**
+     * Constructor
+     */
     public ClassLoaderFacade(final DynamicClassLoaderManagerImpl manager) {
         this.manager = manager;
     }
@@ -49,9 +59,13 @@ public class ClassLoaderFacade extends ClassLoader {
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
         for(final ClassLoader cl : loaders) {
             if ( cl != null ) {
-                final URL u = cl.getResource(name);
-                if ( u != null ) {
-                    return u;
+                try {
+                    final URL u = cl.getResource(name);
+                    if ( u != null ) {
+                        return u;
+                    }
+                } catch (Throwable t) {
+                    logger.error("Exception while querying class loader " + cl 
+ " for resource " + name, t);
                 }
             }
         }
@@ -68,9 +82,13 @@ public class ClassLoaderFacade extends ClassLoader {
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
         for(final ClassLoader cl : loaders) {
             if ( cl != null ) {
-                final Enumeration<URL> e = cl.getResources(name);
-                if ( e != null && e.hasMoreElements() ) {
-                    return e;
+                try {
+                    final Enumeration<URL> e = cl.getResources(name);
+                    if ( e != null && e.hasMoreElements() ) {
+                        return e;
+                    }
+                } catch (Throwable t) {
+                    logger.error("Exception while querying class loader " + cl 
+ " for resources " + name, t);
                 }
             }
         }
@@ -79,7 +97,7 @@ public class ClassLoaderFacade extends ClassLoader {
 
     @Override
     protected synchronized Class<?> loadClass(String name, boolean resolve)
-            throws ClassNotFoundException {
+    throws ClassNotFoundException {
 
         if ( !this.manager.isActive() ) {
             throw new RuntimeException("Dynamic class loader has already been 
deactivated.");
@@ -90,8 +108,10 @@ public class ClassLoaderFacade extends ClassLoader {
                 try {
                     final Class<?> c = cl.loadClass(name);
                     return c;
-                } catch (Exception cnfe) {
+                } catch (ClassNotFoundException cnfe) {
                     // we just ignore this and try the next class loader
+                } catch (Throwable t) {
+                    logger.error("Exception while trying to load class " + 
name + " from class loader " + cl, t);
                 }
             }
         }

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to