You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@sling.apache.org by Bruce Edge <br...@nextissuemedia.com> on 2015/02/04 17:32:10 UTC

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.java:12
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>(DefaultFolioReader.
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-wit
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
>>
>
>
>
>


Re: jaxb, OSGI & com.sun.xml.bind -- Cannot be resolved and overwritten by Boot Delegation

Posted by Bruce Edge <br...@nextissuemedia.com>.
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.edge@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 <br...@nextissuemedia.com>
>>Reply-To: "users@sling.apache.org" <us...@sling.apache.org>
>>Date: Wednesday, February 4, 2015 at 8:32 AM
>>To: "users@sling.apache.org" <us...@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
>>>>>
>
>
>
>


RE: jaxb, OSGI & com.sun.xml.bind -- Cannot be resolved and overwritten by Boot Delegation

Posted by Stefan Seifert <ss...@pro-vision.de>.
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:bruce.edge@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 <br...@nextissuemedia.com>
>Reply-To: "users@sling.apache.org" <us...@sling.apache.org>
>Date: Wednesday, February 4, 2015 at 8:32 AM
>To: "users@sling.apache.org" <us...@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
>>>>


Re: jaxb, OSGI & com.sun.xml.bind -- Cannot be resolved and overwritten by Boot Delegation

Posted by Bruce Edge <br...@nextissuemedia.com>.
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 <br...@nextissuemedia.com>
Reply-To: "users@sling.apache.org" <us...@sling.apache.org>
Date: Wednesday, February 4, 2015 at 8:32 AM
To: "users@sling.apache.org" <us...@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.java: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>(DefaultFolioReader
>.
>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
>>>