aries-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Adam Pilkington (JIRA)" <j...@apache.org>
Subject [jira] [Created] (ARIES-1225) NPE thrown by GetBundleContextAction
Date Fri, 11 Jul 2014 08:10:04 GMT
Adam Pilkington created ARIES-1225:
--------------------------------------

             Summary: NPE thrown by GetBundleContextAction 
                 Key: ARIES-1225
                 URL: https://issues.apache.org/jira/browse/ARIES-1225
             Project: Aries
          Issue Type: Improvement
          Components: Subsystem
            Reporter: Adam Pilkington
            Priority: Trivial


Hi, I'm currently investigating a NPE thrown by GetBundleContextAction - stack trace is below.

java.lang.NullPointerException
	at org.apache.aries.subsystem.core.internal.GetBundleContextAction.run(GetBundleContextAction.java:35)
	at org.apache.aries.subsystem.core.internal.GetBundleContextAction.run(GetBundleContextAction.java:22)
	at java.security.AccessController.doPrivileged(AccessController.java:273)
	at org.apache.aries.subsystem.core.internal.BasicSubsystem.getBundleContext(BasicSubsystem.java:186)
	<snip>
	
I don't know what has caused this, but looking at GetBundleContextAction, line 35 contains
nested method invocations more than one of which can return null. I'd like to submit/suggest
the following patch which just splits this line out and adds some basic error checking. 

Index: GetBundleContextAction.java
===================================================================
--- GetBundleContextAction.java	(revision 1607078)
+++ GetBundleContextAction.java	(working copy)
@@ -16,6 +16,8 @@
 import java.security.PrivilegedAction;
 import java.util.EnumSet;
 
+import org.eclipse.equinox.region.Region;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.subsystem.Subsystem.State;
 
@@ -26,15 +28,23 @@
 		this.subsystem = subsystem;
 	}
 	
-	@Override
 	public BundleContext run() {
 		if (EnumSet.of(State.INSTALL_FAILED, State.UNINSTALLED).contains(
 				subsystem.getState()))
 			return null;
 		BasicSubsystem subsystem = Utils.findScopedSubsystemInRegion(this.subsystem);
-		return subsystem.getRegion().getBundle(
-				RegionContextBundleHelper.SYMBOLICNAME_PREFIX
-						+ subsystem.getSubsystemId(),
-				RegionContextBundleHelper.VERSION).getBundleContext();
+		
+		Region region = subsystem.getRegion();
+		if(region == null) {
+			//can return null as under the covers it calls RegionDigraph.getRegion(name)
+			return null;
+		}
+		Bundle bundle = region.getBundle(RegionContextBundleHelper.SYMBOLICNAME_PREFIX
+						+ subsystem.getSubsystemId(), RegionContextBundleHelper.VERSION);
+		if(bundle == null) {
+			//null if no such bundle
+			return null;
+		}
+		return bundle.getBundleContext();
 	}
 }




--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message