Issue Details (XML | Word | Printable)

Key: JAXB-874
Type: Bug Bug
Status: Open Open
Priority: Minor Minor
Assignee: Martin Grebac
Reporter: jharrop2
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
jaxb

BinderImpl.associativeUnmarshal ClassCastException

Created: 30/Dec/11 01:26 AM   Updated: 29/Jan/12 04:01 PM
Component/s: runtime
Affects Version/s: None
Fix Version/s: None

Time Tracking:
Not Specified

Environment:

JDK 1.6.0_27


Tags:
Participants: jharrop2, Martin Grebac and spock_yh


 Description  « Hide

Binder<Node> binder = myContext.createBinder();
binder.unmarshal( doc ); // org.w3c.dom.Document

Usually (ie for most input dom documents using this method) this works fine.

But for some dom docs, it throws a ClassCastException

java.lang.ClassCastException: org.docx4j.wml.PPr cannot be cast to
javax.xml.bind.JAXBElement
at com.sun.xml.internal.bind.v2.runtime.ElementBeanInfoImpl$IntercepterLoader.intercept(ElementBeanInfoImpl.java:230)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.endElement(UnmarshallingContext.java:522)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.InterningXmlVisitor.endElement(InterningXmlVisitor.java:66)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:143)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:239)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:265)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:234)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:265)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:234)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:265)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:234)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:265)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:234)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:111)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:94)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:87)
at com.sun.xml.internal.bind.v2.runtime.BinderImpl.associativeUnmarshal(BinderImpl.java:145)
at com.sun.xml.internal.bind.v2.runtime.BinderImpl.unmarshal(BinderImpl.java:116)

If I replace the Binder with an Unmarshaller:

Unmarshaller u = jc.createUnmarshaller();
u.unmarshal( doc );

for this troublesome dom doc, unmarshalling is successful.

So something specific to the binder is going wrong.



spock_yh added a comment - 29/Jan/12 04:01 PM

We've encountered a very similar exception, when using Unmarshaller (and not Binder). Here's the stack trace:

Caused by: java.lang.ClassCastException: com.sundaysky.dvg.renderer.vsml.core.parser.v0_9.xmltypes.VsmlHeadType cannot be cast to javax.xml.bind.JAXBElement
at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$IntercepterLoader.intercept(ElementBeanInfoImpl.java:199)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.endElement(UnmarshallingContext.java:437)
at com.sun.xml.bind.v2.runtime.unmarshaller.ValidatingUnmarshaller.endElement(ValidatingUnmarshaller.java:79)
at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:109)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.xinclude.XIncludeHandler.endElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:195)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:168)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at com.sundaysky.dvg.renderer.tpl.parser.TplParser.parseFile(TplParser.java:186)
at com.sundaysky.dvg.renderer.Renderer.render(Renderer.java:149)
... 7 more

Note that this doesn't happen consistently - it seems like sometimes the intercept method receives a state whose "target" field is an actual bound class type, and sometimes it receives a JAXBElement. We were unable to determine any deterministic rule that defines when this happens.