org.apache.axis.message.Text needs cloneNode-implementation OR
org.apache.axis.message.MessageElement.getElementsNS needs to be fixed
-------------------------------------------------------------------------------------------------------------------------------------
Key: AXIS-2507
URL: http://issues.apache.org/jira/browse/AXIS-2507
Project: Apache Axis
Type: Bug
Components: Basic Architecture
Versions: 1.4
Reporter: Ulrich Küster
When you clone a Node using cloneNode(true) and later invoke
getElementsByTagNameNS a class cast exception is thrown in getElementNS.
The reason for this is that getElementNS casts to Element if the object under
inspection is not an instance of Text. However, org.apache.axis.message.Text
does not override NodeImpl.cloneNode(boolean deep). Thus, when I cloned my Node
all Text nodes got replaced by NodeImpl nodes as the NodeImpl.cloneNode method
was called (and this method returns instances of type NodeImpl).
Thus my clone contained nodes which were neither of type Element nore of type
Text but of type NodeImpl. Thus the class cast exception in getElementNS (which
assumes a node is of type Element if it's not of type Text).
I suggest so resolve this issue by implementing cloneNode in Text in a similar
fashion it is implemented in NodeImpl:
/**
* Returns a duplicate of this node, i.e., serves as a generic copy
* constructor for nodes. The duplicate node has no parent; (
* <code>parentNode</code> is <code>null</code>.).
* <br>Cloning an <code>Element</code> copies all attributes and their
* values, including those generated by the XML processor to represent
* defaulted attributes, but this method does not copy any text it
* contains unless it is a deep clone, since the text is contained in a
* child <code>Text</code> node. Cloning an <code>Attribute</code>
* directly, as opposed to be cloned as part of an <code>Element</code>
* cloning operation, returns a specified attribute (
* <code>specified</code> is <code>true</code>). Cloning any other type
* of node simply returns a copy of this node.
* <br>Note that cloning an immutable subtree results in a mutable copy,
* but the children of an <code>EntityReference</code> clone are readonly
* . In addition, clones of unspecified <code>Attr</code> nodes are
* specified. And, cloning <code>Document</code>,
* <code>DocumentType</code>, <code>Entity</code>, and
* <code>Notation</code> nodes is implementation dependent.
*
* @param deep If <code>true</code>, recursively clone the subtree under
* the specified node; if <code>false</code>, clone only the
node
* itself (and its attributes, if it is an
<code>Element</code>).
* @return The duplicate node.
*/
public Node cloneNode(boolean deep) {
return new Text(textRep);
}
--
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]