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 booleanprotected Attributesprotected ArrayListprotected Documentprotected static org.apache.commons.logging.Logprotected Stringprotected Stringprotected NodeImplprotected Stringprotected CharacterDataFields 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 nodenewChildto 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.shortcompareDocumentPosition(Node other) protected NamedNodeMapconvertAttrSAXtoDOM(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.voidRemoves thisNodeobject from the tree.ANamedNodeMapcontaining the attributes of this node (if it is anElement) ornullotherwise.ANodeListthat 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, ornullif it is unspecified.The node immediately following this node.The name of this node, depending on its type; see the table above.shortA code representing the type of the underlying object, as defined above.The value of this node, depending on its type; see the table above.TheDocumentobject associated with this node.protected NodeImplget the parent nodeReturns the parent element of thisNodeobject.The parent of this node.The namespace prefix of this node, ornullif it is unspecified.The node immediately preceding this node.getUserData(String key) getValue()Returns the the value of the immediate child of thisNodeobject if a child exists and its value is text.booleanReturns whether this node (if it is an element) has any attributes.booleanReturns whether this node has any children.protected voidInitialize the children arrayinsertBefore(Node newChild, Node refChild) Inserts the nodenewChildbefore the existing child noderefChild.booleanisDefaultNamespace(String namespaceURI) booleanisDirty()get the dirty bitbooleanisEqualNode(Node arg) booleanisSameNode(Node other) booleanisSupported(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 AttributesImplmake the attributes editablevoidPuts allTextnodes 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) separatesTextnodes, i.e., there are neither adjacentTextnodes nor emptyTextnodes.voidoutput(SerializationContext context) print the contents of this nodevoidNotifies the implementation that thisNodeobject 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 byoldChildfrom the list of children, and returns it.replaceChild(Node newChild, Node oldChild) Replaces the child nodeoldChildwithnewChildin the list of children, and returns theoldChildnode.voidreset()voidsetDirty()voidsetDirty(boolean dirty) set the dirty bit.voidsetIdAttribute(String name, boolean isId) voidsetIdAttributeNode(Attr idAttr, boolean isId) voidsetIdAttributeNS(String namespaceURI, String localName, boolean isId) DOM Level 3 stubsvoidsetNodeValue(String nodeValue) The value of this node, depending on its type; see the table above.voidsetOwnerDocument(Document doc) Set the owner documentprotected voidSet the parent node and invoke appendChild(this) to add this node to the parent's list of children.voidsetParentElement(SOAPElement parent) Sets the parent of thisNodeobject to the givenSOAPElementobject.voidThe namespace prefix of this node, ornullif it is unspecified.voidsetTextContent(String textContent) setUserData(String key, Object data, UserDataHandler handler) voidIf 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:
getNodeTypein interfaceNode
-
normalize
public void normalize()Puts allTextnodes 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) separatesTextnodes, i.e., there are neither adjacentTextnodes nor emptyTextnodes. 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 betweenTextnodes andCDATASectionnodes. -
hasAttributes
public boolean hasAttributes()Returns whether this node (if it is an element) has any attributes.- Specified by:
hasAttributesin interfaceNode- Returns:
trueif this node has any attributes,falseotherwise.- Since:
- DOM Level 2
-
hasChildNodes
public boolean hasChildNodes()Returns whether this node has any children.- Specified by:
hasChildNodesin interfaceNode- Returns:
trueif this node has any children,falseotherwise.
-
getLocalName
Returns the local part of the qualified name of this node.
For nodes of any type other thanELEMENT_NODEandATTRIBUTE_NODEand nodes created with a DOM Level 1 method, such ascreateElementfrom theDocumentinterface, this is alwaysnull.- Specified by:
getLocalNamein interfaceNode- Since:
- DOM Level 2
-
getNamespaceURI
The namespace URI of this node, ornullif 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_NODEandATTRIBUTE_NODEand nodes created with a DOM Level 1 method, such ascreateElementfrom theDocumentinterface, 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:
getNamespaceURIin interfaceNode- Since:
- DOM Level 2
-
getNodeName
The name of this node, depending on its type; see the table above.- Specified by:
getNodeNamein 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:
getNodeValuein 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 aDOMStringvariable on the implementation platform.
-
getPrefix
The namespace prefix of this node, ornullif it is unspecified.
Note that setting this attribute, when permitted, changes thenodeNameattribute, which holds the qualified name, as well as thetagNameandnameattributes of theElementandAttrinterfaces, 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 thenamespaceURIandlocalNamedo not change.
For nodes of any type other thanELEMENT_NODEandATTRIBUTE_NODEand nodes created with a DOM Level 1 method, such ascreateElementfrom theDocumentinterface, this is alwaysnull.- Specified by:
getPrefixin 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 specifiedprefixis malformed per the Namespaces in XML specification, if thenamespaceURIof this node isnull, if the specified prefix is "xml" and thenamespaceURIof 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 thenamespaceURIof this node is different from " http://www.w3.org/2000/xmlns/", or if this node is an attribute and thequalifiedNameof 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:
setNodeValuein 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 aDOMStringvariable on the implementation platform.
-
setPrefix
The namespace prefix of this node, ornullif it is unspecified.
Note that setting this attribute, when permitted, changes thenodeNameattribute, which holds the qualified name, as well as thetagNameandnameattributes of theElementandAttrinterfaces, 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 thenamespaceURIandlocalNamedo not change.
For nodes of any type other thanELEMENT_NODEandATTRIBUTE_NODEand nodes created with a DOM Level 1 method, such ascreateElementfrom theDocumentinterface, this is alwaysnull.- Specified by:
setPrefixin 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 specifiedprefixis malformed per the Namespaces in XML specification, if thenamespaceURIof this node isnull, if the specified prefix is "xml" and thenamespaceURIof 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 thenamespaceURIof this node is different from " http://www.w3.org/2000/xmlns/", or if this node is an attribute and thequalifiedNameof this node is "xmlns" .- Since:
- DOM Level 2
-
setOwnerDocument
Set the owner document- Parameters:
doc-
-
getOwnerDocument
TheDocumentobject associated with this node. This is also theDocumentobject used to create new nodes. When this node is aDocumentor aDocumentTypewhich is not used with anyDocumentyet, this isnull.- Specified by:
getOwnerDocumentin interfaceNode
-
getAttributes
ANamedNodeMapcontaining the attributes of this node (if it is anElement) ornullotherwise.- Specified by:
getAttributesin interfaceNode
-
getFirstChild
The first child of this node. If there is no such node, this returnsnull.- Specified by:
getFirstChildin interfaceNode
-
getLastChild
The last child of this node. If there is no such node, this returnsnull.- Specified by:
getLastChildin interfaceNode
-
getNextSibling
The node immediately following this node. If there is no such node, this returnsnull.- Specified by:
getNextSiblingin interfaceNode
-
getParentNode
The parent of this node. All nodes, exceptAttr,Document,DocumentFragment,Entity, andNotationmay 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:
getParentNodein interfaceNode
-
getPreviousSibling
The node immediately preceding this node. If there is no such node, this returnsnull.- Specified by:
getPreviousSiblingin interfaceNode
-
cloneNode
Returns a duplicate of this node, i.e., serves as a generic copy constructor for nodes. The duplicate node has no parent; (parentNodeisnull.).
Cloning anElementcopies 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 childTextnode. Cloning anAttributedirectly, as opposed to be cloned as part of anElementcloning operation, returns a specified attribute (specifiedistrue). 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 anEntityReferenceclone are readonly . In addition, clones of unspecifiedAttrnodes are specified. And, cloningDocument,DocumentType,Entity, andNotationnodes is implementation dependent. -
getChildNodes
ANodeListthat contains all children of this node. If there are no children, this is aNodeListcontaining no nodes.- Specified by:
getChildNodesin interfaceNode
-
isSupported
Tests whether the DOM implementation implements a specific feature and that feature is supported by this node.- Specified by:
isSupportedin interfaceNode- Parameters:
feature- The name of the feature to test. This is the same name which can be passed to the methodhasFeatureonDOMImplementation.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
trueif the specified feature is supported on this node,falseotherwise. - Since:
- DOM Level 2
-
appendChild
Adds the nodenewChildto the end of the list of children of this node. If thenewChildis already in the tree, it is first removed.- Specified by:
appendChildin interfaceNode- Parameters:
newChild- The node to add.If it is aDocumentFragmentobject, 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 thenewChildnode, or if the node to append is one of this node's ancestors or this node itself.
WRONG_DOCUMENT_ERR: Raised ifnewChildwas 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 byoldChildfrom the list of children, and returns it.- Specified by:
removeChildin 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 ifoldChildis not a child of this node.
-
insertBefore
Inserts the nodenewChildbefore the existing child noderefChild. IfrefChildisnull, insertnewChildat the end of the list of children.
IfnewChildis aDocumentFragmentobject, all of its children are inserted, in the same order, beforerefChild. If thenewChildis already in the tree, it is first removed.- Specified by:
insertBeforein 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 thenewChildnode, or if the node to insert is one of this node's ancestors or this node itself.
WRONG_DOCUMENT_ERR: Raised ifnewChildwas 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 ifrefChildis not a child of this node.
-
replaceChild
Replaces the child nodeoldChildwithnewChildin the list of children, and returns theoldChildnode.
IfnewChildis aDocumentFragmentobject,oldChildis replaced by all of theDocumentFragmentchildren, which are inserted in the same order. If thenewChildis already in the tree, it is first removed.- Specified by:
replaceChildin 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 thenewChildnode, or if the node to put in is one of this node's ancestors or this node itself.
WRONG_DOCUMENT_ERR: Raised ifnewChildwas 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 ifoldChildis not a child of this node.
-
getValue
Returns the the value of the immediate child of thisNodeobject if a child exists and its value is text. -
setParentElement
Sets the parent of thisNodeobject to the givenSOAPElementobject.- Specified by:
setParentElementin interfaceNode- Parameters:
parent- theSOAPElementobject to be set as the parent of thisNodeobject- Throws:
SOAPException- if there is a problem in setting the parent to the given element- See Also:
-
getParentElement
Returns the parent element of thisNodeobject. This method can throw anUnsupportedOperationExceptionif the tree is not kept in memory.- Specified by:
getParentElementin interfaceNode- Returns:
- the
SOAPElementobject that is the parent of thisNodeobject ornullif thisNodeobject is root - Throws:
UnsupportedOperationException- if the whole tree is not kept in memory- See Also:
-
detachNode
public void detachNode()Removes thisNodeobject from the tree. Once removed, this node can be garbage collected if there are no application references to it.- Specified by:
detachNodein interfaceNode
-
recycleNode
public void recycleNode()Notifies the implementation that thisNodeobject 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
recycleNodeimplies that the methoddetachNodehas been called previously.- Specified by:
recycleNodein 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:
setValuein 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:
setUserDatain interfaceNode
-
getBaseURI
- Specified by:
getBaseURIin interfaceNode
-
getTextContent
- Specified by:
getTextContentin interfaceNode
-
isSameNode
- Specified by:
isSameNodein interfaceNode
-
setTextContent
- Specified by:
setTextContentin interfaceNode
-
getUserData
- Specified by:
getUserDatain interfaceNode
-
isDefaultNamespace
- Specified by:
isDefaultNamespacein interfaceNode
-
getFeature
- Specified by:
getFeaturein interfaceNode
-
isEqualNode
- Specified by:
isEqualNodein interfaceNode
-
compareDocumentPosition
- Specified by:
compareDocumentPositionin interfaceNode
-
lookupNamespaceURI
- Specified by:
lookupNamespaceURIin interfaceNode
-
lookupPrefix
- Specified by:
lookupPrefixin interfaceNode
-