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;