Hello Arnaud,

Just to clarify, you are trying with 1.3.2 correct? Secondly, could you
specify the GAVs of groovy bundles and fragments you are working with?

Even better would be if you could provide a sample repo that reproduces the
issue.

Thanks,
Ray

On Fri, Apr 9, 2021 at 5:50 AM Arnaud Mergey <a_mer...@yahoo.fr> wrote:

> 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
> <https://issues.apache.org/jira/browse/ARIES-1985>
>
> [ARIES-1985] Don't process fragments directly - ASF JIRA
>
> <https://issues.apache.org/jira/browse/ARIES-1985>
>
> 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();*
> *                    }*
>
>

-- 
*Raymond Augé* (@rotty3000)
Senior Software Architect *Liferay, Inc.* (@Liferay)
OSGi Fellow

Reply via email to