You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2009/08/27 14:51:47 UTC

svn commit: r808404 - /felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java

Author: rickhall
Date: Thu Aug 27 12:51:46 2009
New Revision: 808404

URL: http://svn.apache.org/viewvc?rev=808404&view=rev
Log:
For resource loading we won't always have a class loader, so we
need to check for that case. (FELIX-1193)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java?rev=808404&r1=808403&r2=808404&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java Thu Aug 27 12:51:46 2009
@@ -619,7 +619,8 @@
                     try
                     {
                         // Get the appropriate class loader for delegation.
-                        ClassLoader parent = m_classLoader.getParent();
+                        ClassLoader parent = (m_classLoader == null)
+                            ? determineParentClassLoader() : m_classLoader.getParent();
                         parent = (parent == null) ? m_bootClassLoader : parent;
                         result = (isClass)
                             ? (Object) parent.loadClass(name)
@@ -1267,35 +1268,6 @@
     {
         if (m_classLoader == null)
         {
-            // Determine the class loader's parent based on the
-            // configuration property; use boot class loader by
-            // default.
-            String cfg = (String) m_configMap.get(Constants.FRAMEWORK_BUNDLE_PARENT);
-            cfg = (cfg == null) ? Constants.FRAMEWORK_BUNDLE_PARENT_BOOT : cfg;
-            final ClassLoader parent;
-            if (cfg.equalsIgnoreCase(Constants.FRAMEWORK_BUNDLE_PARENT_APP))
-            {
-                parent = m_secureAction.getSystemClassLoader();
-            }
-            else if (cfg.equalsIgnoreCase(Constants.FRAMEWORK_BUNDLE_PARENT_EXT))
-            {
-                parent = m_secureAction.getSystemClassLoader().getParent();
-            }
-            else if (cfg.equalsIgnoreCase(Constants.FRAMEWORK_BUNDLE_PARENT_FRAMEWORK))
-            {
-                parent = ModuleImpl.class.getClassLoader();
-            }
-            // On Android we cannot set the parent class loader to be null, so
-            // we special case that situation here and set it to the system
-            // class loader by default instead, which is not really spec.
-            else if (m_bootClassLoader == null)
-            {
-                parent = m_secureAction.getSystemClassLoader();
-            }
-            else
-            {
-                parent = null;
-            }
             if (System.getSecurityManager() != null)
             {
                 try
@@ -1303,7 +1275,7 @@
                     Constructor ctor = (Constructor) m_secureAction.getConstructor(
                         ModuleClassLoader.class, new Class[] { ClassLoader.class });
                     m_classLoader = (ModuleClassLoader)
-                        m_secureAction.invoke(ctor, new Object[] { parent });
+                        m_secureAction.invoke(ctor, new Object[] { determineParentClassLoader() });
                 }
                 catch (Exception ex)
                 {
@@ -1312,12 +1284,46 @@
             }
             else
             {
-                m_classLoader = new ModuleClassLoader(parent);
+                m_classLoader = new ModuleClassLoader(determineParentClassLoader());
             }
         }
         return m_classLoader;
     }
 
+    private ClassLoader determineParentClassLoader()
+    {
+        // Determine the class loader's parent based on the
+        // configuration property; use boot class loader by
+        // default.
+        String cfg = (String) m_configMap.get(Constants.FRAMEWORK_BUNDLE_PARENT);
+        cfg = (cfg == null) ? Constants.FRAMEWORK_BUNDLE_PARENT_BOOT : cfg;
+        final ClassLoader parent;
+        if (cfg.equalsIgnoreCase(Constants.FRAMEWORK_BUNDLE_PARENT_APP))
+        {
+            parent = m_secureAction.getSystemClassLoader();
+        }
+        else if (cfg.equalsIgnoreCase(Constants.FRAMEWORK_BUNDLE_PARENT_EXT))
+        {
+            parent = m_secureAction.getSystemClassLoader().getParent();
+        }
+        else if (cfg.equalsIgnoreCase(Constants.FRAMEWORK_BUNDLE_PARENT_FRAMEWORK))
+        {
+            parent = ModuleImpl.class.getClassLoader();
+        }
+        // On Android we cannot set the parent class loader to be null, so
+        // we special case that situation here and set it to the system
+        // class loader by default instead, which is not really spec.
+        else if (m_bootClassLoader == null)
+        {
+            parent = m_secureAction.getSystemClassLoader();
+        }
+        else
+        {
+            parent = null;
+        }
+        return parent;
+    }
+
     private Object searchImports(String name, boolean isClass)
         throws ClassNotFoundException, ResourceNotFoundException
     {
@@ -2229,4 +2235,4 @@
 
         return sb.toString();
     }
-}
+}
\ No newline at end of file