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
+==============================+