I ran into a similar problem (same stack trace I think) with java 6 and jaxb 
2.2.  I thought that the problem was that jaxb was loading classes from the 
java 6 jaxb implementation instead of the bundlieized 2.2 implementation using 
boot delegation until someone pointed out to me that the packages were 
different in the two implementations.    Even though it doesn't seem possible 
that it could make a difference, I stopped having this problem after I changed 
the boot delegation property to include all the com.sun.* packages other than 
com.sun.xml.bind and the similar package for the jdk built-in jaxb.

I hope someone can figure out what is going on.... I ran out of time to spend 
on this.

During some of my investigations it looked like the 
> com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:258)
was looking in the framework classloader rather than the jaxb bundle 
classloader but I couldn't figure out why.  Perhaps this suggests that 
something changed in boot delegation and not all NoClassDefFoundErrors are 
getting handled appropriately.

thanks
david jencks

On May 19, 2011, at 6:59 PM, Gerry Woods wrote:

> We have encountered a knarly classloading problem that appears to have been
> introduce in Felix 3.0.5 and is still present in the upcoming 3.2.2
> release.  Our scenario is that we are using Java 1.5 with JAXB 2.1.7.
> Because of the well-known problems with JAXB using the thread context
> classloader by default, the enterprising souls here modified the
> javax.xml.bind bundle manifest to include "DynamicImport-Package: *", and
> then the JAXBContext is created using:
> 
>  context = JAXBContext.newInstance(paths.toString(),
> JAXBContext.class.getClassLoader());
> 
> Not the most elegant solution, but we've been getting by.  Until we tried to
> upgrade to 3.2.1, when we started seeing:
> 
> Caused by: java.lang.NoClassDefFoundError
>    at
> com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:258)
>    at
> com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:139)
>    at
> com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:117)
>    at
> com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:188)
>    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>    at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>    at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>    at java.lang.reflect.Method.invoke(Method.java:585)
>    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:133)
>    at javax.xml.bind.ContextFinder.find(ContextFinder.java:299)
>    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:372)
>    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:337)
> 
> We went all the way back to 3.0.4 before this error disappeared.  The
> relevant lines in JAXBContextImpl in this particular version are shown
> below.  It seems that the DatatypeConverter class might be the issue,
> although that appears to be imported from javax.xml.bind.  Any insight you
> guys can offer would be appreciated.  We're stuck on 3.0.4 until we can
> resolve this (classloader humour).
> 
> 254    *public* JAXBContextImpl(Class[] classes, Collection<TypeReference>
> typeRefs,
> 
> 255        Map<Class,Class> subclassReplacements, String defaultNsUri, *
> boolean* c14nSupport,
> 
> 256        @Nullable RuntimeAnnotationReader ar,
> *boolean*xmlAccessorFactorySupport,
> *boolean* allNillable) *throws* JAXBException {
> 
> 257        // initialize datatype converter with ours
> 
> -> 258        DatatypeConverter.*setDatatypeConverter*(DatatypeConverterImpl
> .*theInstance*);
> 
> 259
> 
> 230        *if*(defaultNsUri==*null*)      defaultNsUri="";    // fool-proof
> 
> 231
> 
> 232        *if*(ar==*null*)
> 
> 233            ar = *new* RuntimeInlineAnnotationReader();

Reply via email to