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/07/07 22:49:10 UTC

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

Author: rickhall
Date: Tue Jul  7 20:49:10 2009
New Revision: 791974

URL: http://svn.apache.org/viewvc?rev=791974&view=rev
Log:
Implement workaround for Android to avoid setting parent class
loader to null. (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=791974&r1=791973&r2=791974&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 Tue Jul  7 20:49:10 2009
@@ -100,20 +100,23 @@
     // Statically create the class loader for boot delegation.
     static
     {
+        ClassLoader cl = null;
         try
         {
-            ClassLoader cl = null;
             Constructor ctor = m_secureAction.getDeclaredConstructor(
                 SecureClassLoader.class, new Class[] { ClassLoader.class });
             m_secureAction.setAccesssible(ctor);
             cl = (ClassLoader) m_secureAction.invoke(ctor, new Object[] { null });
-            m_bootClassLoader = cl;
         }
         catch (Exception ex)
         {
-            throw new RuntimeException(
-                "Problem creating boot delegation class loader.", ex);
+            // On Android we get an exception if we set the parent class loader
+            // to null, so we will work around that case by setting the parent
+            // class loader to the system class loader in getClassLoader() below.
+            cl = null;
+            System.err.println("Problem creating boot delegation class loader: " + ex);
         }
+        m_bootClassLoader = cl;
     }
 
     // Boot delegation packages.
@@ -1282,6 +1285,13 @@
             {
                 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 = ClassLoader.getSystemClassLoader();
+            }
             else
             {
                 parent = null;