You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2014/02/10 17:38:25 UTC

svn commit: r1566678 - in /aries/trunk/spi-fly/spi-fly-core/src: main/java/org/apache/aries/spifly/Util.java test/java/org/apache/aries/spifly/UtilTest.java

Author: davidb
Date: Mon Feb 10 16:38:25 2014
New Revision: 1566678

URL: http://svn.apache.org/r1566678
Log:
[SPI Fly] Fix for NPE.

Unit test included.

Modified:
    aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/Util.java
    aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/UtilTest.java

Modified: aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/Util.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/Util.java?rev=1566678&r1=1566677&r2=1566678&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/Util.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/Util.java Mon Feb 10 16:38:25 2014
@@ -72,6 +72,11 @@ public class Util {
     }
 
     public static void fixContextClassloader(String cls, String method, Class<?> clsArg, ClassLoader bundleLoader) {
+        if (BaseActivator.activator == null) {
+            // The system is not yet initialized. We can't do anything.
+            return;
+        }
+
         if (!(bundleLoader instanceof BundleReference)) {
             BaseActivator.activator.log(LogService.LOG_WARNING, "Classloader of consuming bundle doesn't implement BundleReference: " + bundleLoader);
             return;

Modified: aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/UtilTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/UtilTest.java?rev=1566678&r1=1566677&r2=1566678&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/UtilTest.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/UtilTest.java Mon Feb 10 16:38:25 2014
@@ -102,6 +102,39 @@ public class UtilTest {
         assertSame(providerCL, Thread.currentThread().getContextClassLoader());
     }
 
+    @Test
+    public void testNotInitialized() throws Exception {
+        BaseActivator.activator = null;
+
+        URL url = getClass().getResource("/embedded3.jar");
+        assertNotNull("precondition", url);
+
+        Bundle providerBundle = EasyMock.createMock(Bundle.class);
+        final ClassLoader providerCL = new TestBundleClassLoader(new URL [] {url}, getClass().getClassLoader(), providerBundle);
+        EasyMock.expect(providerBundle.getBundleId()).andReturn(42L).anyTimes();
+        EasyMock.expect(providerBundle.getEntryPaths((String) EasyMock.anyObject())).andReturn(null).anyTimes();
+        Dictionary<String, String> providerHeaders = new Hashtable<String, String>();
+        providerHeaders.put(Constants.BUNDLE_CLASSPATH, ".,embedded3.jar");
+        EasyMock.expect(providerBundle.getHeaders()).andReturn(providerHeaders).anyTimes();
+        EasyMock.expect(providerBundle.getResource("embedded3.jar")).andReturn(url).anyTimes();
+        EasyMock.expect(providerBundle.loadClass((String) EasyMock.anyObject())).andAnswer(new IAnswer<Class<?>>() {
+            @Override
+            public Class<?> answer() throws Throwable {
+                return providerCL.loadClass((String) EasyMock.getCurrentArguments()[0]);
+            }
+        }).anyTimes();
+        EasyMock.replay(providerBundle);
+
+        Bundle clientBundle = EasyMock.createMock(Bundle.class);
+        EasyMock.replay(clientBundle);
+        ClassLoader clientCL = new TestBundleClassLoader(new URL [] {}, getClass().getClassLoader(), clientBundle);
+
+        Thread.currentThread().setContextClassLoader(null);
+        Util.fixContextClassloader(ServiceLoader.class.getName(), "load", MySPI.class, clientCL);
+        assertSame("The system is not yet initialized, so the TCCL should not be set",
+                null, Thread.currentThread().getContextClassLoader());
+    }
+
     private static class TestBundleClassLoader extends URLClassLoader implements BundleReference {
         private final Bundle bundle;