Just for completeness I wanted to post the solution in case someone else runs into this as there is no end to end google-able result.
Credit goes to Tomasz for the solution. I was quite stuck without his help. I was close with loading the newer jaxb wrapped in another bundle: <Export-Package>javax.xml.*,com.sun.xml.bind.*</Export-Package> <Embed-Dependency>jaxb-api,jaxb-core,jaxb-impl</Embed-Dependency> but I was missing the magic classloader trick: final ClassLoader orig = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(JAXBContext.class.getClassLoad er()); try { <your jaxb instantiation code here> } catch (JAXBException e) { throw new IOException(e); } finally { Thread.currentThread().setContextClassLoader(orig); } -Bruce >hello bruce. > >this can become tricky. my recommendation was to do not deploy any JAXB >bundle, but to use the version embedded in the JDK and make sure the >system bundle exports its packages as well. additionally JAXB is not >fully OSGi-compatible concerning class loading, so some additional >classloader magic might be required as well. > >some years ago i had a talk on this about apache CXF, which uses JAXB >internally as well: >http://adapt.to/2011/en/schedule/apache-cxf-and-sling--consuming-and-publi >shing-soap-services.html >it may be a bit outdated by now, but basically the process is still the >same. > >a matching fragment bundle that extends the exports of the system bundle >with the JAXB and other XML packages is provided by sling itself: >http://repo1.maven.org/maven2/org/apache/sling/org.apache.sling.fragment.x >ml/1.0.2/ > >stefan > > >>-----Original Message----- >>From: Bruce Edge [mailto:bruce.e...@nextissuemedia.com] >>Sent: Wednesday, February 04, 2015 5:45 PM >>To: users@sling.apache.org >>Subject: Re: jaxb, OSGI & com.sun.xml.bind -- Cannot be resolved and >>overwritten by Boot Delegation >> >>Forgot to mention, I did try the JAXB version 2.1.0 that Steffan >>recommended. >> >>This rippled through my application code and got to the point where it >>would no longer build with a versions so old of some of the >>dependencies. >> >>I wasn't able to locate version 2.1.0 for all components either. >> >>Is there an example or test case using jaxb that I can follow/cargo >>cult? >> >>-Bruce >> >> >>From: Bruce Edge <bruce.e...@nextissuemedia.com> >>Reply-To: "users@sling.apache.org" <users@sling.apache.org> >>Date: Wednesday, February 4, 2015 at 8:32 AM >>To: "users@sling.apache.org" <users@sling.apache.org> >>Subject: Re: jaxb, OSGI & com.sun.xml.bind -- Cannot be resolved and >>overwritten by Boot Delegation >> >> >>>My earlier claims of success were overly optimistic. Just getting >>>everything to load into osgi was one hurdle, but getting jaxb running >>is a >>>completely different story. >>> >>>With the configuration mentioned below, >>> >>>g! lb | grep -i jax >>> 65|Active | 30|jaxb-api (2.2.11) >>> 66|Active | 30|Old JAXB Core (2.2.11) >>> >>> >>>attempting to instantiate a JAXBContext does not work, >>> >>> JAXBContext context = JAXBContext.newInstance(new Class[] >>>{com.nim.content.formats.folio.schema.FolioType.class}); >>> >>>(syntax modification as indicated in [1]) >>> >>>fails with a ClassCastException: >>> >>> >>>04.02.2015 07:32:50.136 *ERROR* [pool-6-thread-1-<main >>>queue>(incoming/file)] >>com.nim.ct.dam.ingest.jobs.ImportFileJobConsumer >>>Exception: java.lang.NullPointerException >>>java.lang.NullPointerException: null >>> at >>>javax.xml.bind.ContextFinder.handleClassCastException(ContextFinder.j >>ava:1 >>>2 >>>9) >>> at >>>javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:265) >>> at >>>javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:249) >>> at javax.xml.bind.ContextFinder.find(ContextFinder.java:477) >>> at >>javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:656) >>> at >>javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:599) >>> at >>>com.nim.content.formats.folio.DefaultFolioReader.<init>(DefaultFolioR >>eader >>>. >>>java:45) >>> >>> >>>Then I tried to use the jaxb-osgi package. I could not even get this >>to >>>load in sling. These were the sling import warnings on the bundle on >>the >>>com.sun.xml.bind.jaxb-osgi bundle (jaxb-osgi-2.2.11.jar) >>> >>> >>> >>>com.sun.org.apache.xml.internal.resolver -- Cannot be resolved but is >>not >>>required and overwritten by Boot Delegation >>>com.sun.org.apache.xml.internal.resolver.tools -- Cannot be resolved >>but >>>is not required and overwritten by Boot Delegation >>>com.sun.source.tree -- Cannot be resolved and overwritten by Boot >>>Delegation >>>com.sun.source.util -- Cannot be resolved and overwritten by Boot >>>Delegation >>>javax.xml.bind,version=2.2.12.b1401091041 -- Cannot be resolved but >>is not >>>required >>>javax.xml.bind.annotation,version=2.2.12.b1401091041 -- Cannot be >>resolved >>>but is not required >>>javax.xml.bind.annotation.adapters,version=2.2.12.b1401091041 -- >>Cannot be >>>resolved but is not required >>>javax.xml.bind.attachment,version=2.2.12.b1401091041 -- Cannot be >>resolved >>>but is not required >>>javax.xml.bind.helpers,version=2.2.12.b1401091041 -- Cannot be >>resolved >>>but is not required >>> >>> >>> >>>I'm a bit at a loss what to try next. >>> >>>-Bruce >>> >>> >>>[1] >>>http://blog.kusandriadi.com/problem-using-jaxb- >>marshallingunmarshalling-wi >>>t >>>hin-osgi-container/ >>> >>> >>>>Thanks for the hints Stephan. They got me going in the right >>direction. >>>> >>>>My problems went away after I added these to my launchpad¹s >>list.xml: >>>> >>>><bundle> >>>> <groupId>javax.xml.bind</groupId> >>>> <artifactId>jaxb-api</artifactId> >>>> <version>2.2.11</version> >>>></bundle> >>>> <bundle> >>>> <groupId>com.sun.xml.bind</groupId> >>>> <artifactId>jaxb-core</artifactId> >>>> <version>2.2.11</version> >>>> </bundle> >>>> >>>>I¹m not entirely sure what was causing the problem, but there seems >>to be >>>>some inconsistency in module naming in this area. >>>> >>>> >>>>With the above bundles specified, the felix console bundles now >>include: >>>> >>>>Old JAXB Core com.sun.xml.bind.jaxb-core 2.2.11 Active >>>>jaxb-api jaxb-api 2.2.11 Active >>>> >>>> >>>>Manually forcing these to load at launchpad start time satisfied the >>>>later >>>>bundle load-time dependencies. >>>> >>>>-Bruce >>>> >>>> >>>>>the packages javax.xml.bind.* are part of the java runtime (at >>least for >>>>>the newer JDKs 7 and up), but not exported by the OSGi system >>bundle by >>>>>default. >>>>> >>>>>if not done already please install the bundle >>>>>org.apache.sling:org.apache.sling.fragment.xml:1.0.2 and restart >>the >>>>>instance, this extends the list of exported packages of the java >>runtime >>>>>for the XML-related packages. but this package currently only >>exports >>>>>JAXB version 2.1.0, can you downgrade to this version? as a rule of >>>>>thumb >>>>>you should always try to use the packages von the java runtime if >>they >>>>>are included in the version you use and install the appropriate >>fragment >>>>>bundle that extends the export list. >>>>> >>>>>packages starting with com.sun.xml are internal-only packages, are >>not >>>>>exported by the system bundle in general and should not be used. >>>>> >>>>>if you really have to update JAXB to a newer version than this can >>>>>become >>>>>cumbersome, because those libraries tend to import packages like >>>>>com.sun.xml which are not exported and have dependencies which >>might be >>>>>difficult to resolve. >>>>> >>>>>stefan >>>>> >>>>>> >>>>>>I'm running into this error trying to use jaxb in a bundle: >>>>>> >>>>>>com.sun.xml.bind -- Cannot be resolved and overwritten by Boot >>>>>>Delegation >>>>>>com.sun.xml.bind.annotation -- Cannot be resolved and overwritten >>by >>>>>>Boot >>>>>>Delegation >>>>>>javax.xml.bind,version=[2.2,3) -- Cannot be resolved >>>>>>javax.xml.bind.annotation,version=[2.2,3) -- Cannot be resolved >>>>>> >>>>>>I assume I need to replace the standard jaxb-core and jaxb-api >>with the >>>>>>osgi >>>>>>variants (jaxb-osgi and jaxb-osgi-extra?), but I haven't found the >>>>>>magic >>>>>>incantation for the maven-bundle-plugin to get this to load in >>sling. >>>>>> >>>>>>What is the procedure for declaring jaxb as a bundle dependency in >>the >>>>>>pom.xml? >>>>>> >>>>>>-Bruce >>>>> > > > >