Hello all,

As some of you might have realized awhile ago, the JAXB implementation 
causes interesting problems for those of you using spring to read 
camel contexts. There are actually 2 errors with similar error output,
so this mail aims to reduce confusion for us all.

Error description: You receive a stacktrace with an inner exception
on the form below.

Caused by: java.lang.NullPointerException
        at 
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.checkOverrideProperties(ClassBeanInfoImpl.java:205)
        at 
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:186)
        at 
com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:509)
        at 
com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:528)
        at 
com.sun.xml.bind.v2.runtime.property.ArrayReferenceNodeProperty.<init>(ArrayReferenceNodeProperty.java:87)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        [ ... and a looong intermediary stack trace removed ... The stacktrace 
ends with: ]

        at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:128)
        at javax.xml.bind.ContextFinder.find(ContextFinder.java:277)
        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:372)
        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:337)
        at 
org.apache.camel.spring.handler.CamelNamespaceHandler.createJaxbContext(CamelNamespaceHandler.java:185)
   <=== 
        at 
org.apache.camel.spring.handler.CamelNamespaceHandler.getJaxbContext(CamelNamespaceHandler.java:172)
        at 
org.apache.camel.spring.handler.CamelNamespaceHandler$CamelContextBeanDefinitionParser.doParse(CamelNamespaceHandler.java:300)

Note that the exception originates from the CamelNamespaceHandler.

There are 2 quite separate causes for this exception.
a) You use different JAXB-API and JAXB-IMPL versions,
   which is *bad*. Fix this problem by managing your
   dependencies correctly.

b) You use correct/same JAXB-API and JAXB-IMPL versions,
   and the problem persists. This is actually a combination
   of a rather interesting implementation in JAXB and our own
   class org.apache.camel.model.InterceptDefinition which does
   not contain any non-transient XML elements or attributes.

   The bug is known in JAXB, and corrected in their trunk in June.
   However, there is currently neither a release nor a snapshot
   containing the (somewhat strange) fix for the bug.
 
   Unfortunately, fellow Camel'ers, I have found no current solution 
   other than downloading the source and building a custom release
   of Jaxb. The reference in Jaxb is http://java.net/jira/browse/JAXB-860
   and a fix permitting you to see the problems/culprits is found
   below.

-            for (Property superProperty : bi.properties) {
+            Property[] props = bi.properties;
+            if (props == null)  {
+                    logger.log(Level.WARNING, "Comsumed Jaxb error (no 
Properties) for type '" + bi.jaxbType +"'");
+                break;
+            }
+            for (Property superProperty : props) {

-- 
+==============================+
| Bästa hälsningar,      
| [sw. "Best regards"]
|                      
| Lennart Jörelid       
| EAI Architect & Integrator
| jGuru Europe AB
+==============================+

Reply via email to