logo       
Google Custom Search
    AddThis Social Bookmark Button

[jira] Resolved: (XERCESJ-1109) Non-DocumentImpl DOM implementation causes : msg#00055

Subject: [jira] Resolved: (XERCESJ-1109) Non-DocumentImpl DOM implementation causes ClassCastExceptions.
     [ http://issues.apache.org/jira/browse/XERCESJ-1109?page=all ]
     
Michael Glavassevich resolved XERCESJ-1109:
-------------------------------------------

    Resolution: Invalid

You cannot extend a DOM implementation simply by creating wrapper classes 
around an existing one.  The classes you've created have no inheritence 
relationship with the Xerces DOM.  You get a ClassCastException because your 
wrappers are masquerading as nodes created by DocumentImpl.  ElementWrapper and 
AttrWrapper are not created by DocumentImpl, yet they return DocumentImpl as 
their owner document.

> 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
>  Attachments: xerces-bug.jar
>
> 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



Try Searching:
servers, voip, java, networking, microsoft ...
<Prev in Thread] Current Thread [Next in Thread>