👍 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

Reply via email to