You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xbean-scm@geronimo.apache.org by ga...@apache.org on 2010/08/04 22:57:36 UTC

svn commit: r982402 - /geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/BundleAssignableClassFinder.java

Author: gawor
Date: Wed Aug  4 20:57:35 2010
New Revision: 982402

URL: http://svn.apache.org/viewvc?rev=982402&view=rev
Log:
XBEAN-153: Avoid NPE by explicitely checking if passed class is java.lang.Object (classReader.getSuperName() returns null if class is java.lang.Object)

Modified:
    geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/BundleAssignableClassFinder.java

Modified: geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/BundleAssignableClassFinder.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/BundleAssignableClassFinder.java?rev=982402&r1=982401&r2=982402&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/BundleAssignableClassFinder.java (original)
+++ geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/BundleAssignableClassFinder.java Wed Aug  4 20:57:35 2010
@@ -189,11 +189,12 @@ public class BundleAssignableClassFinder
             logger.warn("Unable to check the interface " + interfaceName, e);
             return false;
         } finally {
-            if (in != null)
+            if (in != null) {
                 try {
                     in.close();
                 } catch (Exception e) {
                 }
+            }
         }
     }
 
@@ -205,7 +206,10 @@ public class BundleAssignableClassFinder
     private boolean isSuperClassAssignable(String superClassName) {
         if (targetClassNames.contains(superClassName)) {
             return true;
+        } else if (superClassName.equals("java/lang/Object")) {
+            return false;
         }
+        
         //Check parent class
         URL url = bundle.getResource("/" + superClassName + ".class");
         if (url == null) {
@@ -216,28 +220,27 @@ public class BundleAssignableClassFinder
         try {
             in = url.openStream();
             ClassReader classReader = new ClassReader(in);
-            String[] superInterfaceNames = classReader.getInterfaces();
+            
             //Check interfaces
+            String[] superInterfaceNames = classReader.getInterfaces();            
             for (String superInterfaceName : superInterfaceNames) {
                 if (isInterfaceAssignable(superInterfaceName)) {
                     return true;
-                }
+                }                
             }
+            
             //Check className
-            if (classReader.getSuperName().equals("java/lang/Object")) {
-                return targetClassNames.contains("java/lang/Object");
-            } else {
-                return isSuperClassAssignable(classReader.getSuperName());
-            }
+            return isSuperClassAssignable(classReader.getSuperName());            
         } catch (IOException e) {
             logger.warn("Unable to check the super class  " + superClassName, e);
             return false;
         } finally {
-            if (in != null)
+            if (in != null) {
                 try {
                     in.close();
                 } catch (Exception e) {
                 }
+            }
         }
     }