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-publishing-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.xml/1.0.2/

stefan


>-----Original Message-----
>From: Bruce Edge [mailto:[email protected]]
>Sent: Wednesday, February 04, 2015 5:45 PM
>To: [email protected]
>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 <[email protected]>
>Reply-To: "[email protected]" <[email protected]>
>Date: Wednesday, February 4, 2015 at 8:32 AM
>To: "[email protected]" <[email protected]>
>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
>>>>

Reply via email to