Richard Eckart de Castilho created ARIES-2082: -------------------------------------------------
Summary: spifly does not properly merge fragment headers Key: ARIES-2082 URL: https://issues.apache.org/jira/browse/ARIES-2082 Project: Aries Issue Type: Task Reporter: Richard Eckart de Castilho Consider the following situation: * bundle H is a fragement host * bundle F1 is a fragment to H and publishes an SPI provider {{osgi.serviceloader;osgi.serviceloader="foo.bar.MySpiProvider"}} * bundle F2 is a fragment to H and publishes two SPI providers {{osgi.serviceloader;osgi.serviceloader="foo.bar.MySpiProvider", osgi.serviceloader;osgi.serviceloader="foo.bar.MyOtherSpiProvider"}} When spifly goes through the bundles and fragments, it tries to consider the bundle and the fragments: Source: ProviderBundleTrackerCustomizer {noformat} private String getHeaderFromBundleOrFragment(Bundle bundle, String headerName, String matchString) { BundleRevision rev = bundle.adapt(BundleRevision.class); if (rev != null) { BundleWiring wiring = rev.getWiring(); if (wiring != null) { 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(); } } } } } {noformat} However, that loop breaks as soon as a first matching header is found. It does not really handle the case of merging all the SPI publishing headers from all the fragments together - so it is rather random which SPIs are actually detected. Expected behavior: spifly should be able to find "foo.bar.MySpiProvider" and "foo.bar.MyOtherSpiProvider" irrespective of how the fragment wirings are ordered. Note that pulling the {{if (matches...)}} out of the loop does also not help - it appears the {{headerParameters.mergeWith(fragmentParameters, false)}} can not properly merge the headers of F1 and F2 either. -- This message was sent by Atlassian Jira (v8.20.10#820010)