Non-DocumentImpl DOM implementation causes ClassCastExceptions.
---------------------------------------------------------------
Key: XERCESJ-1109
URL: http://issues.apache.org/jira/browse/XERCESJ-1109
Project: Xerces2-J
Type: Bug
Components: DOM (Level 3 Core)
Versions: 2.7.1
Environment: jdk1.5.0_04 on Linux
Reporter: Andrzej Roman Cichocki
The documentation at http://xml.apache.org/xerces2-j/properties.html suggests
that setting the value of the
http://apache.org/xml/properties/dom/document-class-name property to any
implementation of org.w3c.dom.Document should work.
In the following test DocumentWrapper wraps org.apache.xerces.dom.DocumentImpl.
All methods simply delegate to DocumentImpl except for createElementNS and
createAttributeNS. These wrap the objects returned by the underlying
DocumentImpl in ElementWrapper and AttrWrapper respectively. All methods in
ElementWrapper and AttrWrapper simply delegate to the underlying Impl.
The aim is for Xerces to build a DOM tree consisting of wrapper instances which
should behave in exactly the same way as the underlying Impls. In practice the
parser bombs with ClassCastExceptions:
java.lang.ClassCastException: ElementWrapper
at
org.apache.xerces.dom.ParentNode.internalInsertBefore(ParentNode.java:381)
at org.apache.xerces.dom.ParentNode.insertBefore(ParentNode.java:282)
at
org.apache.xerces.dom.CoreDocumentImpl.insertBefore(CoreDocumentImpl.java:389)
at org.apache.xerces.dom.NodeImpl.appendChild(NodeImpl.java:235)
at NodeWrapper.appendChild(NodeWrapper.java:80)
at
org.apache.xerces.parsers.AbstractDOMParser.startElement(AbstractDOMParser.java:1014)
at
org.apache.xerces.parsers.AbstractDOMParser.emptyElement(AbstractDOMParser.java:1099)
at
org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:277)
at
org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(XMLNSDocumentScannerImpl.java:738)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1754)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:323)
at
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:107)
at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:225)
at
org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:98)
at Main.main(Main.java:16)
java.lang.ClassCastException: AttrWrapper
at org.apache.xerces.dom.AttributeMap.setNamedItem(AttributeMap.java:89)
at
org.apache.xerces.dom.ElementImpl.setAttributeNode(ElementImpl.java:549)
at ElementWrapper.setAttributeNode(ElementWrapper.java:37)
at
org.apache.xerces.parsers.AbstractDOMParser.startElement(AbstractDOMParser.java:922)
at
org.apache.xerces.parsers.AbstractDOMParser.emptyElement(AbstractDOMParser.java:1099)
at
org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:277)
at
org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(XMLNSDocumentScannerImpl.java:738)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1754)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:323)
at
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:107)
at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:225)
at
org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:98)
at Main.main(Main.java:23)
The source code and class files to reproduce these exceptions are in the
attached jar. It is runnable as follows provided xercesImpl.jar is in the same
directory:
java -jar xerces-bug.jar
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]