Class XmlTokenStream

java.lang.Object
com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream

public class XmlTokenStream extends Object
Simple helper class used on top of STAX XMLStreamReader to 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 Details

    • XML_START_ELEMENT

      public static final int XML_START_ELEMENT
      See Also:
    • XML_END_ELEMENT

      public static final int XML_END_ELEMENT
      See Also:
    • XML_ATTRIBUTE_NAME

      public static final int XML_ATTRIBUTE_NAME
      See Also:
    • XML_ATTRIBUTE_VALUE

      public static final int XML_ATTRIBUTE_VALUE
      See Also:
    • XML_TEXT

      public static final int XML_TEXT
      See Also:
    • XML_ROOT_TEXT

      public static final int XML_ROOT_TEXT
      See Also:
    • XML_END

      public static final int XML_END
      See Also:
    • REPLAY_START_DUP

      private static final int REPLAY_START_DUP
      See Also:
    • REPLAY_END

      private static final int REPLAY_END
      See Also:
    • REPLAY_START_DELAYED

      private static final int REPLAY_START_DELAYED
      See Also:
    • XSI_NAMESPACE

      private static final String XSI_NAMESPACE
      See Also:
    • _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 which FromXmlParser.Features are enabled.
    • _cfgProcessXsiNil

      protected boolean _cfgProcessXsiNil
    • _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 is XML_TEXT and 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 String _localName
    • _namespaceURI

      protected String _namespaceURI
    • _textValue

      protected 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 to next() 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 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 String _nextNamespaceURI
  • Constructor Details

    • XmlTokenStream

      public XmlTokenStream(XMLStreamReader xmlReader, com.fasterxml.jackson.core.io.ContentReference sourceRef, int formatFeatures, XmlNameProcessor nameProcessor)
  • Method Details

    • initialize

      public int initialize() throws XMLStreamException
      Second part of initialization, to be called immediately after construction
      Throws:
      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 XMLStreamException
      Throws:
      XMLStreamException
    • skipEndElement

      public void skipEndElement() throws IOException, XMLStreamException
      Throws:
      IOException
      XMLStreamException
    • getCurrentToken

      public int getCurrentToken()
    • getText

      public String getText()
    • getLocalName

      public String getLocalName()
      Accessor for local name of current named event (that is, XML_START_ELEMENT or XML_ATTRIBUTE_NAME).

      NOTE: name NOT accessible on XML_END_ELEMENT

    • getNamespaceURI

      public String getNamespaceURI()
    • hasXsiNil

      public boolean hasXsiNil()
    • closeCompletely

      public void closeCompletely() throws XMLStreamException
      Throws:
      XMLStreamException
    • close

      public void close() throws XMLStreamException
      Throws:
      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 to next(), 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 XMLStreamException
      Throws:
      XMLStreamException
    • _collectUntilTag

      private final String _collectUntilTag() throws XMLStreamException
      Returns:
      Collected text, if any, EXCEPT that if FromXmlParser.Feature.EMPTY_ELEMENT_AS_NULL AND empty element, returns null
      Throws:
      XMLStreamException
    • _skipAndCollectTextUntilTag

      private final int _skipAndCollectTextUntilTag() throws XMLStreamException
      Throws:
      XMLStreamException
    • _getText

      private final String _getText(org.codehaus.stax2.XMLStreamReader2 r) throws XMLStreamException
      Throws:
      XMLStreamException
    • _initStartElement

      private final int _initStartElement() throws XMLStreamException
      Throws:
      XMLStreamException
    • _checkXsiAttributes

      private final void _checkXsiAttributes()
      Since:
      2.10
    • _decodeElementName

      protected void _decodeElementName(String namespaceURI, String localName)
      Since:
      2.14
    • _decodeAttributeName

      protected void _decodeAttributeName(String namespaceURI, String localName)
      Since:
      2.14
    • _handleRepeatElement

      protected int _handleRepeatElement() throws XMLStreamException
      Method called to handle details of repeating "virtual" start/end elements, needed for handling 'unwrapped' lists.
      Throws:
      XMLStreamException
    • _handleEndElement

      private final int _handleEndElement()
    • _extractLocation

      private com.fasterxml.jackson.core.JsonLocation _extractLocation(org.codehaus.stax2.XMLStreamLocation2 location)
    • _allWs

      protected static boolean _allWs(String str)
    • _currentStateDesc

      protected String _currentStateDesc()
    • _stateDesc

      protected String _stateDesc(int state)