👍 Nice work! Sorry I couldn't offer feedback earlier. On Wed, Nov 1, 2023 at 4:20 PM Steinar Bang <s...@dod.no> wrote:
> >>>>> Steinar Bang <s...@dod.no>: > > > I have helped the TwelveMonkeys image manipulation library[1] with OSGi > > support. However, when I try using I see that only the image reader > > services are exported from the bundles. > > > I need help figuring out why the image writer services aren't exported. > > > I need advice on the maven-bundle-plugin config. > [snip!] > > > In Apache Karaf, when I look at a bundle that should provide two > > services (javax.imageio.spi.ImageReaderSpi and > javax.imageio.spi.ImageWriterSpi) > > it provides only javax.imageio.spi.ImageReaderSpi: > > https://gist.github.com/steinarb/5c84fef1e76976e276681f6f0b697e35 > > > This is what I'm trying to do to provide the services: > > > https://github.com/haraldk/TwelveMonkeys/blob/master/imageio/imageio-jpeg/pom.xml#L43 > > > However this results in the following MANIFEST.MF: > > > https://gist.github.com/steinarb/5256d998721f0c9dd33d25c100bc420d#file-gistfile1-txt-L32 > > I have figured it out, I think. > > I needed to change stuff like this: > <instructions> > <Provide-Capability> > osgi.serviceloader; > osgi.serviceloader=javax.imageio.spi.ImageReaderSpi; > osgi.serviceloader=javax.imageio.spi.ImageWriterSpi > </Provide-Capability> > </instructions> > > into this: > <instructions> > <Provide-Capability> > osgi.serviceloader; > osgi.serviceloader=javax.imageio.spi.ImageReaderSpi, > osgi.serviceloader; > osgi.serviceloader=javax.imageio.spi.ImageWriterSpi > </Provide-Capability> > </instructions> > > I.e. replace the semicolon after ImageReaderSpi with a comma, and add an > extra osgi.serviceloader; before the second sercice. > > And then the manifest looks like this ("=" instead of "~=" in front of the > second service): > > https://gist.github.com/steinarb/23c272a171ea7873d1a410750670b902#file-gistfile1-txt-L31 > > And the loaded bundle exposes two services: > https://gist.github.com/steinarb/f0dae9211dd44781977bb0a32ffc317f > > And the service is loaded and registered. > > ImageIO writer lookup based on the reader, which worked fine for me in > unit tests, doesn't work in OSGi. But that's because ImageIO uses > ClassLoader.getSystemClassLoader() to find a class based on the fully > qualified class name, and that doesn't find a class loaded with OSGi. > > The change that will become a PR to TwelveMonkeys, is: > > https://github.com/steinarb/TwelveMonkeys/commit/cdadd38e699be8e17593c5b0529dfe98c30d13af > > -- *Raymond Augé* (@rotty3000) Senior Software Architect *Liferay, Inc.* (@Liferay) OSGi Fellow, Java Champion