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(); }