[ https://issues.apache.org/jira/browse/ARIES-1225?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14077816#comment-14077816 ]
Adam Pilkington commented on ARIES-1225: ---------------------------------------- I noticed that check as well, and did some cross referencing with the OSGi spec, and the subsystem moves through a number of states - would the check be better to say that unless the subsystem was in one of the states that is guaranteed to have the region set it returns null ? This would then cover other transient states such as installing. The reason for asking is that this error was thrown during server startup/bundle installation. > 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 > Original Estimate: 10m > Remaining Estimate: 10m > > 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)