506104: NullPointerException in LifecycleManager maybeCreateApplicationContextFor on non-Blueprint bundle
Signed-off-by: Olaf Otto <olaf@x100.de>
diff --git a/extender/src/main/java/org/eclipse/gemini/blueprint/extender/internal/activator/LifecycleManager.java b/extender/src/main/java/org/eclipse/gemini/blueprint/extender/internal/activator/LifecycleManager.java
index 087aa0f..406c298 100644
--- a/extender/src/main/java/org/eclipse/gemini/blueprint/extender/internal/activator/LifecycleManager.java
+++ b/extender/src/main/java/org/eclipse/gemini/blueprint/extender/internal/activator/LifecycleManager.java
@@ -150,6 +150,12 @@
BundleContext localBundleContext = OsgiBundleUtils.getBundleContext(bundle);
+ if (localBundleContext == null) {
+ if (debug)
+ log.debug("Bundle " + bundleString + " has no bundle context; skipping...");
+ return;
+ }
+
// initialize context
final DelegatedExecutionOsgiBundleApplicationContext localApplicationContext;
diff --git a/extender/src/test/java/org/eclipse/gemini/blueprint/extender/internal/activator/LifecycleManagerTest.java b/extender/src/test/java/org/eclipse/gemini/blueprint/extender/internal/activator/LifecycleManagerTest.java
index d6eb3d9..9ee88a6 100644
--- a/extender/src/test/java/org/eclipse/gemini/blueprint/extender/internal/activator/LifecycleManagerTest.java
+++ b/extender/src/test/java/org/eclipse/gemini/blueprint/extender/internal/activator/LifecycleManagerTest.java
@@ -21,18 +21,18 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Version;
import static java.lang.Thread.yield;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.isA;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.*;
/**
* @author Olaf Otto
@@ -136,6 +136,23 @@
verifyOsgiContextProcessorInteractions();
}
+ @Test
+ public void testLifecycleManagerIgnoresBundlesWithoutContexttForContextCreation() throws Exception {
+ this.testee.maybeCreateApplicationContextFor(createBundleWithoutBundleContext());
+ verifyContextCreationIsNotAttempted();
+ }
+
+ private void verifyContextCreationIsNotAttempted() throws Exception {
+ verify(this.contextCreator, never()).createApplicationContext(Matchers.<BundleContext>any());
+ }
+
+ private Bundle createBundleWithoutBundleContext() {
+ Bundle bundle = mock(Bundle.class);
+ Version version = new Version(1, 0, 0);
+ doReturn(version).when(bundle).getVersion();
+ return bundle;
+ }
+
private void addContextToLifecycleManager() throws Exception {
this.testee.maybeCreateApplicationContextFor(this.bundleContext.getBundle());