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)