Package org.apache.axis.message
Class NodeImpl
java.lang.Object
org.apache.axis.message.NodeImpl
- All Implemented Interfaces:
Serializable
,Cloneable
,Node
,Node
- Direct Known Subclasses:
MessageElement
,Text
This is our implementation of the DOM node
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected boolean
protected Attributes
protected ArrayList
protected Document
protected static org.apache.commons.logging.Log
protected String
protected String
protected NodeImpl
protected String
protected CharacterData
Fields inherited from interface org.w3c.dom.Node
ATTRIBUTE_NODE, CDATA_SECTION_NODE, COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, DOCUMENT_POSITION_CONTAINED_BY, DOCUMENT_POSITION_CONTAINS, DOCUMENT_POSITION_DISCONNECTED, DOCUMENT_POSITION_FOLLOWING, DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, DOCUMENT_POSITION_PRECEDING, DOCUMENT_TYPE_NODE, ELEMENT_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, NOTATION_NODE, PROCESSING_INSTRUCTION_NODE, TEXT_NODE
-
Constructor Summary
ConstructorsConstructorDescriptionNodeImpl()
empty constructorNodeImpl
(CharacterData text) constructor which adopts the name and NS of the char data, and its text -
Method Summary
Modifier and TypeMethodDescriptionappendChild
(Node newChild) Adds the nodenewChild
to the end of the list of children of this node.cloneNode
(boolean deep) Returns a duplicate of this node, i.e., serves as a generic copy constructor for nodes.short
compareDocumentPosition
(Node other) protected NamedNodeMap
convertAttrSAXtoDOM
(Attributes saxAttr) The internal representation of Attributes cannot help being changed It is because Attribute is not immutible Type, so if we keep out value and just return it in another form, the application may chnae it, which we cannot detect without some kind back track method (call back notifying the chnage.) I am not sure which approach is better.void
Removes thisNode
object from the tree.ANamedNodeMap
containing the attributes of this node (if it is anElement
) ornull
otherwise.ANodeList
that contains all children of this node.getFeature
(String feature, String version) The first child of this node.The last child of this node.Returns the local part of the qualified name of this node.The namespace URI of this node, ornull
if it is unspecified.The node immediately following this node.The name of this node, depending on its type; see the table above.short
A code representing the type of the underlying object, as defined above.The value of this node, depending on its type; see the table above.TheDocument
object associated with this node.protected NodeImpl
get the parent nodeReturns the parent element of thisNode
object.The parent of this node.The namespace prefix of this node, ornull
if it is unspecified.The node immediately preceding this node.getUserData
(String key) getValue()
Returns the the value of the immediate child of thisNode
object if a child exists and its value is text.boolean
Returns whether this node (if it is an element) has any attributes.boolean
Returns whether this node has any children.protected void
Initialize the children arrayinsertBefore
(Node newChild, Node refChild) Inserts the nodenewChild
before the existing child noderefChild
.boolean
isDefaultNamespace
(String namespaceURI) boolean
isDirty()
get the dirty bitboolean
isEqualNode
(Node arg) boolean
isSameNode
(Node other) boolean
isSupported
(String feature, String version) Tests whether the DOM implementation implements a specific feature and that feature is supported by this node.lookupNamespaceURI
(String prefix) lookupPrefix
(String namespaceURI) protected AttributesImpl
make the attributes editablevoid
Puts allText
nodes in the full depth of the sub-tree underneath thisNode
, including attribute nodes, into a "normal" form where only structure (e.g., elements, comments, processing instructions, CDATA sections, and entity references) separatesText
nodes, i.e., there are neither adjacentText
nodes nor emptyText
nodes.void
output
(SerializationContext context) print the contents of this nodevoid
Notifies the implementation that thisNode
object is no longer being used by the application and that the implementation is free to reuse this object for nodes that may be created later.removeChild
(Node oldChild) Removes the child node indicated byoldChild
from the list of children, and returns it.replaceChild
(Node newChild, Node oldChild) Replaces the child nodeoldChild
withnewChild
in the list of children, and returns theoldChild
node.void
reset()
void
setDirty()
void
setDirty
(boolean dirty) set the dirty bit.void
setIdAttribute
(String name, boolean isId) void
setIdAttributeNode
(Attr idAttr, boolean isId) void
setIdAttributeNS
(String namespaceURI, String localName, boolean isId) DOM Level 3 stubsvoid
setNodeValue
(String nodeValue) The value of this node, depending on its type; see the table above.void
setOwnerDocument
(Document doc) Set the owner documentprotected void
Set the parent node and invoke appendChild(this) to add this node to the parent's list of children.void
setParentElement
(SOAPElement parent) Sets the parent of thisNode
object to the givenSOAPElement
object.void
The namespace prefix of this node, ornull
if it is unspecified.void
setTextContent
(String textContent) setUserData
(String key, Object data, UserDataHandler handler) void
If this is a Text node then this method will set its value, otherwise it sets the value of the immediate (Text) child of this node.
-
Field Details
-
log
protected static org.apache.commons.logging.Log log -
name
-
prefix
-
namespaceURI
-
attributes
-
document
-
parent
-
children
-
textRep
-
_isDirty
protected boolean _isDirty
-
-
Constructor Details
-
NodeImpl
public NodeImpl()empty constructor -
NodeImpl
constructor which adopts the name and NS of the char data, and its text- Parameters:
text
-
-
-
Method Details
-
getNodeType
public short getNodeType()A code representing the type of the underlying object, as defined above.- Specified by:
getNodeType
in interfaceNode
-
normalize
public void normalize()Puts allText
nodes in the full depth of the sub-tree underneath thisNode
, including attribute nodes, into a "normal" form where only structure (e.g., elements, comments, processing instructions, CDATA sections, and entity references) separatesText
nodes, i.e., there are neither adjacentText
nodes nor emptyText
nodes. This can be used to ensure that the DOM view of a document is the same as if it were saved and re-loaded, and is useful when operations (such as XPointer lookups) that depend on a particular document tree structure are to be used.In cases where the document containsCDATASections
, the normalize operation alone may not be sufficient, since XPointers do not differentiate betweenText
nodes andCDATASection
nodes. -
hasAttributes
public boolean hasAttributes()Returns whether this node (if it is an element) has any attributes.- Specified by:
hasAttributes
in interfaceNode
- Returns:
true
if this node has any attributes,false
otherwise.- Since:
- DOM Level 2
-
hasChildNodes
public boolean hasChildNodes()Returns whether this node has any children.- Specified by:
hasChildNodes
in interfaceNode
- Returns:
true
if this node has any children,false
otherwise.
-
getLocalName
Returns the local part of the qualified name of this node.
For nodes of any type other thanELEMENT_NODE
andATTRIBUTE_NODE
and nodes created with a DOM Level 1 method, such ascreateElement
from theDocument
interface, this is alwaysnull
.- Specified by:
getLocalName
in interfaceNode
- Since:
- DOM Level 2
-
getNamespaceURI
The namespace URI of this node, ornull
if it is unspecified.
This is not a computed value that is the result of a namespace lookup based on an examination of the namespace declarations in scope. It is merely the namespace URI given at creation time.
For nodes of any type other thanELEMENT_NODE
andATTRIBUTE_NODE
and nodes created with a DOM Level 1 method, such ascreateElement
from theDocument
interface, this is alwaysnull
.Per the Namespaces in XML Specification an attribute does not inherit its namespace from the element it is attached to. If an attribute is not explicitly given a namespace, it simply has no namespace.- Specified by:
getNamespaceURI
in interfaceNode
- Since:
- DOM Level 2
-
getNodeName
The name of this node, depending on its type; see the table above.- Specified by:
getNodeName
in interfaceNode
-
getNodeValue
The value of this node, depending on its type; see the table above. When it is defined to benull
, setting it has no effect.- Specified by:
getNodeValue
in interfaceNode
- Throws:
DOMException
- NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.DOMException
- DOMSTRING_SIZE_ERR: Raised when it would return more characters than fit in aDOMString
variable on the implementation platform.
-
getPrefix
The namespace prefix of this node, ornull
if it is unspecified.
Note that setting this attribute, when permitted, changes thenodeName
attribute, which holds the qualified name, as well as thetagName
andname
attributes of theElement
andAttr
interfaces, when applicable.
Note also that changing the prefix of an attribute that is known to have a default value, does not make a new attribute with the default value and the original prefix appear, since thenamespaceURI
andlocalName
do not change.
For nodes of any type other thanELEMENT_NODE
andATTRIBUTE_NODE
and nodes created with a DOM Level 1 method, such ascreateElement
from theDocument
interface, this is alwaysnull
.- Specified by:
getPrefix
in interfaceNode
- Throws:
DOMException
- INVALID_CHARACTER_ERR: Raised if the specified prefix contains an illegal character, per the XML 1.0 specification .
NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
NAMESPACE_ERR: Raised if the specifiedprefix
is malformed per the Namespaces in XML specification, if thenamespaceURI
of this node isnull
, if the specified prefix is "xml" and thenamespaceURI
of this node is different from "http://www.w3.org/XML/1998/namespace", if this node is an attribute and the specified prefix is "xmlns" and thenamespaceURI
of this node is different from " http://www.w3.org/2000/xmlns/", or if this node is an attribute and thequalifiedName
of this node is "xmlns" .- Since:
- DOM Level 2
-
setNodeValue
The value of this node, depending on its type; see the table above. When it is defined to benull
, setting it has no effect.- Specified by:
setNodeValue
in interfaceNode
- Throws:
DOMException
- NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.DOMException
- DOMSTRING_SIZE_ERR: Raised when it would return more characters than fit in aDOMString
variable on the implementation platform.
-
setPrefix
The namespace prefix of this node, ornull
if it is unspecified.
Note that setting this attribute, when permitted, changes thenodeName
attribute, which holds the qualified name, as well as thetagName
andname
attributes of theElement
andAttr
interfaces, when applicable.
Note also that changing the prefix of an attribute that is known to have a default value, does not make a new attribute with the default value and the original prefix appear, since thenamespaceURI
andlocalName
do not change.
For nodes of any type other thanELEMENT_NODE
andATTRIBUTE_NODE
and nodes created with a DOM Level 1 method, such ascreateElement
from theDocument
interface, this is alwaysnull
.- Specified by:
setPrefix
in interfaceNode
- Throws:
DOMException
- INVALID_CHARACTER_ERR: Raised if the specified prefix contains an illegal character, per the XML 1.0 specification .
NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
NAMESPACE_ERR: Raised if the specifiedprefix
is malformed per the Namespaces in XML specification, if thenamespaceURI
of this node isnull
, if the specified prefix is "xml" and thenamespaceURI
of this node is different from "http://www.w3.org/XML/1998/namespace", if this node is an attribute and the specified prefix is "xmlns" and thenamespaceURI
of this node is different from " http://www.w3.org/2000/xmlns/", or if this node is an attribute and thequalifiedName
of this node is "xmlns" .- Since:
- DOM Level 2
-
setOwnerDocument
Set the owner document- Parameters:
doc
-
-
getOwnerDocument
TheDocument
object associated with this node. This is also theDocument
object used to create new nodes. When this node is aDocument
or aDocumentType
which is not used with anyDocument
yet, this isnull
.- Specified by:
getOwnerDocument
in interfaceNode
-
getAttributes
ANamedNodeMap
containing the attributes of this node (if it is anElement
) ornull
otherwise.- Specified by:
getAttributes
in interfaceNode
-
getFirstChild
The first child of this node. If there is no such node, this returnsnull
.- Specified by:
getFirstChild
in interfaceNode
-
getLastChild
The last child of this node. If there is no such node, this returnsnull
.- Specified by:
getLastChild
in interfaceNode
-
getNextSibling
The node immediately following this node. If there is no such node, this returnsnull
.- Specified by:
getNextSibling
in interfaceNode
-
getParentNode
The parent of this node. All nodes, exceptAttr
,Document
,DocumentFragment
,Entity
, andNotation
may have a parent. However, if a node has just been created and not yet added to the tree, or if it has been removed from the tree, this isnull
.- Specified by:
getParentNode
in interfaceNode
-
getPreviousSibling
The node immediately preceding this node. If there is no such node, this returnsnull
.- Specified by:
getPreviousSibling
in interfaceNode
-
cloneNode
Returns a duplicate of this node, i.e., serves as a generic copy constructor for nodes. The duplicate node has no parent; (parentNode
isnull
.).
Cloning anElement
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 childText
node. Cloning anAttribute
directly, as opposed to be cloned as part of anElement
cloning operation, returns a specified attribute (specified
istrue
). Cloning any other type of node simply returns a copy of this node.
Note that cloning an immutable subtree results in a mutable copy, but the children of anEntityReference
clone are readonly . In addition, clones of unspecifiedAttr
nodes are specified. And, cloningDocument
,DocumentType
,Entity
, andNotation
nodes is implementation dependent. -
getChildNodes
ANodeList
that contains all children of this node. If there are no children, this is aNodeList
containing no nodes.- Specified by:
getChildNodes
in interfaceNode
-
isSupported
Tests whether the DOM implementation implements a specific feature and that feature is supported by this node.- Specified by:
isSupported
in interfaceNode
- Parameters:
feature
- The name of the feature to test. This is the same name which can be passed to the methodhasFeature
onDOMImplementation
.version
- This is the version number of the feature to test. In Level 2, version 1, this is the string "2.0". If the version is not specified, supporting any version of the feature will cause the method to returntrue
.- Returns:
- Returns
true
if the specified feature is supported on this node,false
otherwise. - Since:
- DOM Level 2
-
appendChild
Adds the nodenewChild
to the end of the list of children of this node. If thenewChild
is already in the tree, it is first removed.- Specified by:
appendChild
in interfaceNode
- Parameters:
newChild
- The node to add.If it is aDocumentFragment
object, the entire contents of the document fragment are moved into the child list of this node- Returns:
- The node added.
- Throws:
DOMException
- HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not allow children of the type of thenewChild
node, or if the node to append is one of this node's ancestors or this node itself.
WRONG_DOCUMENT_ERR: Raised ifnewChild
was created from a different document than the one that created this node.
NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly or if the previous parent of the node being inserted is readonly.
-
removeChild
Removes the child node indicated byoldChild
from the list of children, and returns it.- Specified by:
removeChild
in interfaceNode
- Parameters:
oldChild
- The node being removed.- Returns:
- The node removed.
- Throws:
DOMException
- NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
NOT_FOUND_ERR: Raised ifoldChild
is not a child of this node.
-
insertBefore
Inserts the nodenewChild
before the existing child noderefChild
. IfrefChild
isnull
, insertnewChild
at the end of the list of children.
IfnewChild
is aDocumentFragment
object, all of its children are inserted, in the same order, beforerefChild
. If thenewChild
is already in the tree, it is first removed.- Specified by:
insertBefore
in interfaceNode
- Parameters:
newChild
- The node to insert.refChild
- The reference node, i.e., the node before which the new node must be inserted.- Returns:
- The node being inserted.
- Throws:
DOMException
- HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not allow children of the type of thenewChild
node, or if the node to insert is one of this node's ancestors or this node itself.
WRONG_DOCUMENT_ERR: Raised ifnewChild
was created from a different document than the one that created this node.
NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly or if the parent of the node being inserted is readonly.
NOT_FOUND_ERR: Raised ifrefChild
is not a child of this node.
-
replaceChild
Replaces the child nodeoldChild
withnewChild
in the list of children, and returns theoldChild
node.
IfnewChild
is aDocumentFragment
object,oldChild
is replaced by all of theDocumentFragment
children, which are inserted in the same order. If thenewChild
is already in the tree, it is first removed.- Specified by:
replaceChild
in interfaceNode
- Parameters:
newChild
- The new node to put in the child list.oldChild
- The node being replaced in the list.- Returns:
- The node replaced.
- Throws:
DOMException
- HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not allow children of the type of thenewChild
node, or if the node to put in is one of this node's ancestors or this node itself.
WRONG_DOCUMENT_ERR: Raised ifnewChild
was created from a different document than the one that created this node.
NO_MODIFICATION_ALLOWED_ERR: Raised if this node or the parent of the new node is readonly.
NOT_FOUND_ERR: Raised ifoldChild
is not a child of this node.
-
getValue
Returns the the value of the immediate child of thisNode
object if a child exists and its value is text. -
setParentElement
Sets the parent of thisNode
object to the givenSOAPElement
object.- Specified by:
setParentElement
in interfaceNode
- Parameters:
parent
- theSOAPElement
object to be set as the parent of thisNode
object- Throws:
SOAPException
- if there is a problem in setting the parent to the given element- See Also:
-
getParentElement
Returns the parent element of thisNode
object. This method can throw anUnsupportedOperationException
if the tree is not kept in memory.- Specified by:
getParentElement
in interfaceNode
- Returns:
- the
SOAPElement
object that is the parent of thisNode
object ornull
if thisNode
object is root - Throws:
UnsupportedOperationException
- if the whole tree is not kept in memory- See Also:
-
detachNode
public void detachNode()Removes thisNode
object from the tree. Once removed, this node can be garbage collected if there are no application references to it.- Specified by:
detachNode
in interfaceNode
-
recycleNode
public void recycleNode()Notifies the implementation that thisNode
object is no longer being used by the application and that the implementation is free to reuse this object for nodes that may be created later.Calling the method
recycleNode
implies that the methoddetachNode
has been called previously.- Specified by:
recycleNode
in interfaceNode
-
setValue
If this is a Text node then this method will set its value, otherwise it sets the value of the immediate (Text) child of this node. The value of the immediate child of this node can be set only if, there is one child node and that node is a Text node, or if there are no children in which case a child Text node will be created.- Specified by:
setValue
in interfaceNode
- Parameters:
value
- the text to set- Throws:
IllegalStateException
- if the node is not a Text node and either has more than one child node or has a child node that is not a Text node
-
makeAttributesEditable
make the attributes editable- Returns:
- AttributesImpl
-
convertAttrSAXtoDOM
The internal representation of Attributes cannot help being changed It is because Attribute is not immutible Type, so if we keep out value and just return it in another form, the application may chnae it, which we cannot detect without some kind back track method (call back notifying the chnage.) I am not sure which approach is better. -
initializeChildren
protected void initializeChildren()Initialize the children array -
getParent
get the parent node- Returns:
- parent node
-
setParent
Set the parent node and invoke appendChild(this) to add this node to the parent's list of children.- Parameters:
parent
-- Throws:
SOAPException
-
output
print the contents of this node- Parameters:
context
-- Throws:
Exception
-
isDirty
public boolean isDirty()get the dirty bit- Returns:
-
setDirty
public void setDirty(boolean dirty) set the dirty bit. will also set our parent as dirty, if there is one. Note that clearing the dirty bit does not propagate upwards.- Parameters:
dirty
- new value of the dirty bit
-
setDirty
public void setDirty() -
reset
public void reset() -
setIdAttributeNS
DOM Level 3 stubs -
setIdAttribute
-
setIdAttributeNode
-
getSchemaTypeInfo
-
setUserData
- Specified by:
setUserData
in interfaceNode
-
getBaseURI
- Specified by:
getBaseURI
in interfaceNode
-
getTextContent
- Specified by:
getTextContent
in interfaceNode
-
isSameNode
- Specified by:
isSameNode
in interfaceNode
-
setTextContent
- Specified by:
setTextContent
in interfaceNode
-
getUserData
- Specified by:
getUserData
in interfaceNode
-
isDefaultNamespace
- Specified by:
isDefaultNamespace
in interfaceNode
-
getFeature
- Specified by:
getFeature
in interfaceNode
-
isEqualNode
- Specified by:
isEqualNode
in interfaceNode
-
compareDocumentPosition
- Specified by:
compareDocumentPosition
in interfaceNode
-
lookupNamespaceURI
- Specified by:
lookupNamespaceURI
in interfaceNode
-
lookupPrefix
- Specified by:
lookupPrefix
in interfaceNode
-