Class XmlTokenStream
- java.lang.Object
-
- com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream
-
public class XmlTokenStream extends java.lang.ObjectSimple helper class used on top of STAXXMLStreamReaderto further abstract out all irrelevant details, and to expose equivalent of flat token stream with no "fluff" tokens (comments, processing instructions, mixed content) all of which is just to simplify actual higher-level conversion to JSON tokens.Beyond initial idea there are also couple of other detours like ability to "replay" some tokens, add virtual wrappers (ironically to support "unwrapped" array values), and to unroll "Objects" into String values in some cases.
-
-
Field Summary
Fields Modifier and Type Field Description protected int_attributeCountprotected boolean_cfgProcessXsiNilprotected boolean_cfgProcessXsiTypeprotected int_currentStateprotected ElementWrapper_currentWrapperWrapping state, if any active (null if none)protected int_formatFeaturesBit flag composed of bits that indicate whichFromXmlParser.Features are enabled.protected java.lang.String_localNameprotected XmlNameProcessor_nameProcessorprotected java.lang.String_namespaceURIprotected XmlNameProcessor.XmlName_nameToDecodeReusable internal value objectprotected int_nextAttributeIndexIndex of the next attribute of the current START_ELEMENT to return (as field name and value pair), if any; -1 when no attributes to returnprotected java.lang.String_nextLocalNameIn cases where we need to 'inject' a virtual END_ELEMENT, we may also need to restore START_ELEMENT afterwards; if so, this is where names are held.protected java.lang.String_nextNamespaceURIprotected boolean_repeatCurrentTokenMarker flag set if caller wants to "push back" current token so that next call tonext()should simply be given what was already read.protected int_repeatElementFlag used to indicate that given element should be "replayed".protected com.fasterxml.jackson.core.io.ContentReference_sourceReferenceprotected boolean_startElementAfterTextFlag set true if current event isXML_TEXTand there is START_ELEMENTprotected java.lang.String_textValueCurrent text value for TEXT_VALUE returnedprotected org.codehaus.stax2.XMLStreamReader2_xmlReaderprotected boolean_xsiNilFoundMarker used to indicate presence of `xsi:nil="true"' in current START_ELEMENT.private static intREPLAY_ENDprivate static intREPLAY_START_DELAYEDprivate static intREPLAY_START_DUPstatic intXML_ATTRIBUTE_NAMEstatic intXML_ATTRIBUTE_VALUEstatic intXML_ENDstatic intXML_END_ELEMENTstatic intXML_ROOT_TEXTstatic intXML_START_ELEMENTstatic intXML_TEXTprivate static java.lang.StringXSI_NAMESPACE
-
Constructor Summary
Constructors Constructor Description XmlTokenStream(javax.xml.stream.XMLStreamReader xmlReader, com.fasterxml.jackson.core.io.ContentReference sourceRef, int formatFeatures, XmlNameProcessor nameProcessor)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected static boolean_allWs(java.lang.String str)private void_checkXsiAttributes()private java.lang.String_collectUntilTag()protected java.lang.String_currentStateDesc()protected void_decodeAttributeName(java.lang.String namespaceURI, java.lang.String localName)protected void_decodeElementName(java.lang.String namespaceURI, java.lang.String localName)private com.fasterxml.jackson.core.JsonLocation_extractLocation(org.codehaus.stax2.XMLStreamLocation2 location)private java.lang.String_getText(org.codehaus.stax2.XMLStreamReader2 r)private int_handleEndElement()protected int_handleRepeatElement()Method called to handle details of repeating "virtual" start/end elements, needed for handling 'unwrapped' lists.private int_initStartElement()private int_next()private int_skipAndCollectTextUntilTag()protected java.lang.String_stateDesc(int state)voidclose()voidcloseCompletely()com.fasterxml.jackson.core.JsonLocationgetCurrentLocation()intgetCurrentToken()java.lang.StringgetLocalName()Accessor for local name of current named event (that is,XML_START_ELEMENTorXML_ATTRIBUTE_NAME).java.lang.StringgetNamespaceURI()java.lang.StringgetText()com.fasterxml.jackson.core.JsonLocationgetTokenLocation()org.codehaus.stax2.XMLStreamReader2getXmlReader()booleanhasXsiNil()intinitialize()Second part of initialization, to be called immediately after constructionintnext()protected voidpushbackCurrentToken()Method that can be called to ask stream to literally just return current token with the next call tonext(), without more work.protected voidrepeatStartElement()Method used to add virtual wrapping, which just duplicates START_ELEMENT stream points to, and its matching closing element.protected voidsetFormatFeatures(int f)protected voidskipAttributes()Method called to skip any attributes current START_ELEMENT may have, so that they are not returned as token.voidskipEndElement()
-
-
-
Field Detail
-
XML_START_ELEMENT
public static final int XML_START_ELEMENT
- See Also:
- Constant Field Values
-
XML_END_ELEMENT
public static final int XML_END_ELEMENT
- See Also:
- Constant Field Values
-
XML_ATTRIBUTE_NAME
public static final int XML_ATTRIBUTE_NAME
- See Also:
- Constant Field Values
-
XML_ATTRIBUTE_VALUE
public static final int XML_ATTRIBUTE_VALUE
- See Also:
- Constant Field Values
-
XML_TEXT
public static final int XML_TEXT
- See Also:
- Constant Field Values
-
XML_ROOT_TEXT
public static final int XML_ROOT_TEXT
- See Also:
- Constant Field Values
-
XML_END
public static final int XML_END
- See Also:
- Constant Field Values
-
REPLAY_START_DUP
private static final int REPLAY_START_DUP
- See Also:
- Constant Field Values
-
REPLAY_END
private static final int REPLAY_END
- See Also:
- Constant Field Values
-
REPLAY_START_DELAYED
private static final int REPLAY_START_DELAYED
- See Also:
- Constant Field Values
-
XSI_NAMESPACE
private static final java.lang.String XSI_NAMESPACE
- See Also:
- Constant Field Values
-
_xmlReader
protected final org.codehaus.stax2.XMLStreamReader2 _xmlReader
-
_sourceReference
protected final com.fasterxml.jackson.core.io.ContentReference _sourceReference
-
_formatFeatures
protected int _formatFeatures
Bit flag composed of bits that indicate whichFromXmlParser.Features are enabled.
-
_cfgProcessXsiNil
protected boolean _cfgProcessXsiNil
-
_cfgProcessXsiType
protected boolean _cfgProcessXsiType
-
_nameProcessor
protected XmlNameProcessor _nameProcessor
-
_currentState
protected int _currentState
-
_attributeCount
protected int _attributeCount
-
_xsiNilFound
protected boolean _xsiNilFound
Marker used to indicate presence of `xsi:nil="true"' in current START_ELEMENT.- Since:
- 2.10
-
_startElementAfterText
protected boolean _startElementAfterText
Flag set true if current event isXML_TEXTand there is START_ELEMENT- Since:
- 2.12
-
_nextAttributeIndex
protected int _nextAttributeIndex
Index of the next attribute of the current START_ELEMENT to return (as field name and value pair), if any; -1 when no attributes to return
-
_localName
protected java.lang.String _localName
-
_namespaceURI
protected java.lang.String _namespaceURI
-
_textValue
protected java.lang.String _textValue
Current text value for TEXT_VALUE returned
-
_repeatCurrentToken
protected boolean _repeatCurrentToken
Marker flag set if caller wants to "push back" current token so that next call tonext()should simply be given what was already read.- Since:
- 2.12
-
_nameToDecode
protected XmlNameProcessor.XmlName _nameToDecode
Reusable internal value object- Since:
- 2.14
-
_repeatElement
protected int _repeatElement
Flag used to indicate that given element should be "replayed".
-
_currentWrapper
protected ElementWrapper _currentWrapper
Wrapping state, if any active (null if none)
-
_nextLocalName
protected java.lang.String _nextLocalName
In cases where we need to 'inject' a virtual END_ELEMENT, we may also need to restore START_ELEMENT afterwards; if so, this is where names are held.
-
_nextNamespaceURI
protected java.lang.String _nextNamespaceURI
-
-
Constructor Detail
-
XmlTokenStream
public XmlTokenStream(javax.xml.stream.XMLStreamReader xmlReader, com.fasterxml.jackson.core.io.ContentReference sourceRef, int formatFeatures, XmlNameProcessor nameProcessor)
-
-
Method Detail
-
initialize
public int initialize() throws javax.xml.stream.XMLStreamExceptionSecond part of initialization, to be called immediately after construction- Throws:
javax.xml.stream.XMLStreamException- Since:
- 2.12
-
getXmlReader
public org.codehaus.stax2.XMLStreamReader2 getXmlReader()
-
setFormatFeatures
protected void setFormatFeatures(int f)
- Since:
- 2.9
-
next
public int next() throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
skipEndElement
public void skipEndElement() throws java.io.IOException, javax.xml.stream.XMLStreamException- Throws:
java.io.IOExceptionjavax.xml.stream.XMLStreamException
-
getCurrentToken
public int getCurrentToken()
-
getText
public java.lang.String getText()
-
getLocalName
public java.lang.String getLocalName()
Accessor for local name of current named event (that is,XML_START_ELEMENTorXML_ATTRIBUTE_NAME).NOTE: name NOT accessible on
XML_END_ELEMENT
-
getNamespaceURI
public java.lang.String getNamespaceURI()
-
hasXsiNil
public boolean hasXsiNil()
-
closeCompletely
public void closeCompletely() throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
close
public void close() throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
getCurrentLocation
public com.fasterxml.jackson.core.JsonLocation getCurrentLocation()
-
getTokenLocation
public com.fasterxml.jackson.core.JsonLocation getTokenLocation()
-
repeatStartElement
protected void repeatStartElement()
Method used to add virtual wrapping, which just duplicates START_ELEMENT stream points to, and its matching closing element.
-
pushbackCurrentToken
protected void pushbackCurrentToken()
Method that can be called to ask stream to literally just return current token with the next call tonext(), without more work.- Since:
- 2.12
-
skipAttributes
protected void skipAttributes()
Method called to skip any attributes current START_ELEMENT may have, so that they are not returned as token.- Since:
- 2.1
-
_next
private final int _next() throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
_collectUntilTag
private final java.lang.String _collectUntilTag() throws javax.xml.stream.XMLStreamException- Returns:
- Collected text, if any, EXCEPT that if
FromXmlParser.Feature.EMPTY_ELEMENT_AS_NULLAND empty element, returnsnull - Throws:
javax.xml.stream.XMLStreamException
-
_skipAndCollectTextUntilTag
private final int _skipAndCollectTextUntilTag() throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
_getText
private final java.lang.String _getText(org.codehaus.stax2.XMLStreamReader2 r) throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
_initStartElement
private final int _initStartElement() throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
_checkXsiAttributes
private final void _checkXsiAttributes()
- Since:
- 2.10
-
_decodeElementName
protected void _decodeElementName(java.lang.String namespaceURI, java.lang.String localName)- Since:
- 2.14
-
_decodeAttributeName
protected void _decodeAttributeName(java.lang.String namespaceURI, java.lang.String localName)- Since:
- 2.14
-
_handleRepeatElement
protected int _handleRepeatElement() throws javax.xml.stream.XMLStreamExceptionMethod called to handle details of repeating "virtual" start/end elements, needed for handling 'unwrapped' lists.- Throws:
javax.xml.stream.XMLStreamException
-
_handleEndElement
private final int _handleEndElement()
-
_extractLocation
private com.fasterxml.jackson.core.JsonLocation _extractLocation(org.codehaus.stax2.XMLStreamLocation2 location)
-
_allWs
protected static boolean _allWs(java.lang.String str)
-
_currentStateDesc
protected java.lang.String _currentStateDesc()
-
_stateDesc
protected java.lang.String _stateDesc(int state)
-
-