I notice randomly this stacktrace since I upgraded spifly from 1.2.4
java.lang.NullPointerException at
java.util.HashMap.putMapEntries(HashMap.java:501) at
java.util.HashMap.putAll(HashMap.java:785) at
org.apache.aries.spifly.BaseActivator.lambda$registerProviderBundle$3(BaseActivator.java:268)
at java.util.Map.compute(Map.java:1093) at
java.util.Collections$SynchronizedMap.compute(Collections.java:2684) at
org.apache.aries.spifly.BaseActivator.registerProviderBundle(BaseActivator.java:261)
at
org.apache.aries.spifly.ProviderBundleTrackerCustomizer.addingBundle(ProviderBundleTrackerCustomizer.java:173)
at
org.apache.aries.spifly.ProviderBundleTrackerCustomizer.addingBundle(ProviderBundleTrackerCustomizer.java:64)
at
org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:475)
at
org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:1)
at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
at org.osgi.util.tracker.BundleTracker.open(BundleTracker.java:159) at
org.apache.aries.spifly.BaseActivator.start(BaseActivator.java:99) at
org.apache.aries.spifly.dynamic.DynamicWeavingActivator.start(DynamicWeavingActivator.java:37)
it may have been introduced with
[ARIES-1985] Don't process fragments directly - ASF JIRA
|
|
| |
[ARIES-1985] Don't process fragments directly - ASF JIRA
|
|
|
After a quick debug
The cause is in in
org.apache.aries.spifly.ProviderBundleTrackerCustomizer.getHeaderFromBundleOrFragment(Bundle,
String, String)
groovy bundle has 2 fragments in my runtime groovy-xml and groovy-json.
in
for (BundleWire wire :
wiring.getProvidedWires("osgi.wiring.host")) { Bundle
fragment = wire.getRequirement().getRevision().getBundle();
Parameters fragmentParameters = new
Parameters(fragment.getHeaders().get(headerName)); if
(MERGE_HEADERS.contains(headerName)) {
headerParameters.mergeWith(fragmentParameters, false); }
else { headerParameters =
fragmentParameters; }
if (matches(headerParameters.toString(), matchString)) {
return headerParameters.toString(); }
}
if groovy-xml is processed first there is no Provide-Capablity error matches
return true because matchString is null, so groovy-json is not processed so its
header cannot be processed
the fix may be to move outside the for loop : if
(matches(headerParameters.toString(), matchString)) {
return headerParameters.toString(); }