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

Reply via email to