public class DOMStreamReader
extends java.lang.Object
implements javax.xml.stream.XMLStreamReader, javax.xml.namespace.NamespaceContext
XMLStreamReader
on top of a DOM tree.
Since various libraries as well as users often create "incorrect" DOM node, this class spends a lot of efforts making sure that broken DOM trees are nevertheless interpreted correctly.
For example, if a DOM level
1 tree is passed, each method will attempt to return the correct value
by using Node.getNodeName()
.
Similarly, if DOM is missing explicit namespace declarations, this class attempts to emulate necessary declarations.
Modifier and Type | Class and Description |
---|---|
protected static class |
DOMStreamReader.Scope
Namespace declarations on one element.
|
Modifier and Type | Field and Description |
---|---|
protected org.w3c.dom.Node |
_current
Current DOM node being traversed.
|
private FinalArrayList<org.w3c.dom.Attr> |
_currentAttributes
List of attributes extracted from
_namedNodeMap . |
private org.w3c.dom.NamedNodeMap |
_namedNodeMap
Named mapping for attributes and NS decls for the current node.
|
private org.w3c.dom.Node |
_start
Starting node of the subtree being traversed.
|
protected int |
_state
State of this reader.
|
protected int |
depth
Depth of the current element.
|
protected DOMStreamReader.Scope[] |
scopes
DOMStreamReader.Scope buffer. |
protected java.lang.String |
wholeText
If the reader points at
the text node ,
its whole value. |
Constructor and Description |
---|
DOMStreamReader() |
DOMStreamReader(org.w3c.dom.Node node) |
Modifier and Type | Method and Description |
---|---|
protected int |
_next() |
private DOMStreamReader.Scope |
allocateScope()
Allocate new
DOMStreamReader.Scope for splitAttributes() . |
void |
close() |
private void |
ensureNs(org.w3c.dom.Node n)
Sub-routine of
splitAttributes() . |
private org.w3c.dom.Node |
findRootElement()
Finds the root element node of the traversal.
|
private static java.lang.String |
fixNull(java.lang.String s) |
int |
getAttributeCount() |
java.lang.String |
getAttributeLocalName(int index)
Return an attribute's local name.
|
javax.xml.namespace.QName |
getAttributeName(int index)
Return an attribute's qname.
|
java.lang.String |
getAttributeNamespace(int index) |
java.lang.String |
getAttributePrefix(int index) |
java.lang.String |
getAttributeType(int index) |
java.lang.String |
getAttributeValue(int index) |
java.lang.String |
getAttributeValue(java.lang.String namespaceURI,
java.lang.String localName) |
java.lang.String |
getCharacterEncodingScheme() |
private DOMStreamReader.Scope |
getCheckedScope()
Verifies the current state to see if we can return the scope, and do so
if appropriate.
|
java.lang.String |
getElementText() |
java.lang.String |
getEncoding() |
int |
getEventType() |
java.lang.String |
getLocalName()
Return an element's local name.
|
javax.xml.stream.Location |
getLocation() |
javax.xml.namespace.QName |
getName()
Return an element's qname.
|
javax.xml.namespace.NamespaceContext |
getNamespaceContext() |
int |
getNamespaceCount() |
java.lang.String |
getNamespacePrefix(int index) |
java.lang.String |
getNamespaceURI() |
java.lang.String |
getNamespaceURI(int index) |
java.lang.String |
getNamespaceURI(java.lang.String prefix)
This method is not particularly fast, but shouldn't be called very
often.
|
java.lang.String |
getPIData() |
java.lang.String |
getPITarget() |
java.lang.String |
getPrefix() |
java.lang.String |
getPrefix(java.lang.String nsUri) |
java.util.Iterator |
getPrefixes(java.lang.String nsUri) |
private static java.lang.String |
getPrefixForAttr(org.w3c.dom.Attr attr,
java.lang.String nsUri)
If the given attribute is a namespace declaration for the given namespace URI,
return its prefix.
|
java.lang.Object |
getProperty(java.lang.String str) |
java.lang.String |
getText() |
char[] |
getTextCharacters() |
int |
getTextCharacters(int sourceStart,
char[] target,
int targetStart,
int targetLength) |
int |
getTextLength() |
int |
getTextStart() |
java.lang.String |
getVersion() |
boolean |
hasName() |
boolean |
hasNext() |
boolean |
hasText() |
boolean |
isAttributeSpecified(int param) |
boolean |
isCharacters() |
boolean |
isEndElement() |
boolean |
isStandalone() |
boolean |
isStartElement() |
boolean |
isWhiteSpace() |
private static int |
mapNodeTypeToState(int nodetype) |
int |
next() |
int |
nextTag() |
void |
require(int type,
java.lang.String namespaceURI,
java.lang.String localName) |
void |
setCurrentNode(org.w3c.dom.Node node) |
protected void |
splitAttributes()
Called when the current node is
Element to look at attribute list
(which contains both ns decl and attributes in DOM) and split them
to attributes-proper and namespace decls. |
boolean |
standaloneSet() |
protected org.w3c.dom.Node _current
private org.w3c.dom.Node _start
private org.w3c.dom.NamedNodeMap _namedNodeMap
protected java.lang.String wholeText
the text node
,
its whole value.
This is simply a cache of Text.getWholeText()
of _current
,
but when a large binary data sent as base64 text, this could get very much
non-trivial.
private final FinalArrayList<org.w3c.dom.Attr> _currentAttributes
_namedNodeMap
.protected DOMStreamReader.Scope[] scopes
DOMStreamReader.Scope
buffer.protected int depth
scopes
.protected int _state
public DOMStreamReader()
public DOMStreamReader(org.w3c.dom.Node node)
public void setCurrentNode(org.w3c.dom.Node node)
public void close() throws javax.xml.stream.XMLStreamException
close
in interface javax.xml.stream.XMLStreamReader
javax.xml.stream.XMLStreamException
protected void splitAttributes()
Element
to look at attribute list
(which contains both ns decl and attributes in DOM) and split them
to attributes-proper and namespace decls.private void ensureNs(org.w3c.dom.Node n)
splitAttributes()
.
Makes sure that the namespace URI/prefix used in the given node is available, and if not, declare it on the current scope to "fix" it. It's often common to create DOM trees without putting namespace declarations, and this makes sure that such DOM tree will be properly marshalled.
private DOMStreamReader.Scope allocateScope()
DOMStreamReader.Scope
for splitAttributes()
.public int getAttributeCount()
getAttributeCount
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getAttributeLocalName(int index)
getAttributeLocalName
in interface javax.xml.stream.XMLStreamReader
public javax.xml.namespace.QName getAttributeName(int index)
getAttributeName
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getAttributeNamespace(int index)
getAttributeNamespace
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getAttributePrefix(int index)
getAttributePrefix
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getAttributeType(int index)
getAttributeType
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getAttributeValue(int index)
getAttributeValue
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getAttributeValue(java.lang.String namespaceURI, java.lang.String localName)
getAttributeValue
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getCharacterEncodingScheme()
getCharacterEncodingScheme
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getElementText() throws javax.xml.stream.XMLStreamException
getElementText
in interface javax.xml.stream.XMLStreamReader
javax.xml.stream.XMLStreamException
public java.lang.String getEncoding()
getEncoding
in interface javax.xml.stream.XMLStreamReader
public int getEventType()
getEventType
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getLocalName()
getLocalName
in interface javax.xml.stream.XMLStreamReader
public javax.xml.stream.Location getLocation()
getLocation
in interface javax.xml.stream.XMLStreamReader
public javax.xml.namespace.QName getName()
getName
in interface javax.xml.stream.XMLStreamReader
public javax.xml.namespace.NamespaceContext getNamespaceContext()
getNamespaceContext
in interface javax.xml.stream.XMLStreamReader
private DOMStreamReader.Scope getCheckedScope()
public int getNamespaceCount()
getNamespaceCount
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getNamespacePrefix(int index)
getNamespacePrefix
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getNamespaceURI(int index)
getNamespaceURI
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getNamespaceURI()
getNamespaceURI
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getNamespaceURI(java.lang.String prefix)
getNamespaceURI
in interface javax.xml.namespace.NamespaceContext
getNamespaceURI
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getPrefix(java.lang.String nsUri)
getPrefix
in interface javax.xml.namespace.NamespaceContext
private org.w3c.dom.Node findRootElement()
private static java.lang.String getPrefixForAttr(org.w3c.dom.Attr attr, java.lang.String nsUri)
public java.util.Iterator getPrefixes(java.lang.String nsUri)
getPrefixes
in interface javax.xml.namespace.NamespaceContext
public java.lang.String getPIData()
getPIData
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getPITarget()
getPITarget
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getPrefix()
getPrefix
in interface javax.xml.stream.XMLStreamReader
public java.lang.Object getProperty(java.lang.String str) throws java.lang.IllegalArgumentException
getProperty
in interface javax.xml.stream.XMLStreamReader
java.lang.IllegalArgumentException
public java.lang.String getText()
getText
in interface javax.xml.stream.XMLStreamReader
public char[] getTextCharacters()
getTextCharacters
in interface javax.xml.stream.XMLStreamReader
public int getTextCharacters(int sourceStart, char[] target, int targetStart, int targetLength) throws javax.xml.stream.XMLStreamException
getTextCharacters
in interface javax.xml.stream.XMLStreamReader
javax.xml.stream.XMLStreamException
public int getTextLength()
getTextLength
in interface javax.xml.stream.XMLStreamReader
public int getTextStart()
getTextStart
in interface javax.xml.stream.XMLStreamReader
public java.lang.String getVersion()
getVersion
in interface javax.xml.stream.XMLStreamReader
public boolean hasName()
hasName
in interface javax.xml.stream.XMLStreamReader
public boolean hasNext() throws javax.xml.stream.XMLStreamException
hasNext
in interface javax.xml.stream.XMLStreamReader
javax.xml.stream.XMLStreamException
public boolean hasText()
hasText
in interface javax.xml.stream.XMLStreamReader
public boolean isAttributeSpecified(int param)
isAttributeSpecified
in interface javax.xml.stream.XMLStreamReader
public boolean isCharacters()
isCharacters
in interface javax.xml.stream.XMLStreamReader
public boolean isEndElement()
isEndElement
in interface javax.xml.stream.XMLStreamReader
public boolean isStandalone()
isStandalone
in interface javax.xml.stream.XMLStreamReader
public boolean isStartElement()
isStartElement
in interface javax.xml.stream.XMLStreamReader
public boolean isWhiteSpace()
isWhiteSpace
in interface javax.xml.stream.XMLStreamReader
private static int mapNodeTypeToState(int nodetype)
public int next() throws javax.xml.stream.XMLStreamException
next
in interface javax.xml.stream.XMLStreamReader
javax.xml.stream.XMLStreamException
protected int _next() throws javax.xml.stream.XMLStreamException
javax.xml.stream.XMLStreamException
public int nextTag() throws javax.xml.stream.XMLStreamException
nextTag
in interface javax.xml.stream.XMLStreamReader
javax.xml.stream.XMLStreamException
public void require(int type, java.lang.String namespaceURI, java.lang.String localName) throws javax.xml.stream.XMLStreamException
require
in interface javax.xml.stream.XMLStreamReader
javax.xml.stream.XMLStreamException
public boolean standaloneSet()
standaloneSet
in interface javax.xml.stream.XMLStreamReader
private static java.lang.String fixNull(java.lang.String s)