Class XmlTokenStream


  • public class XmlTokenStream
    extends java.lang.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.

    • Constructor Summary

      Constructors 
      Constructor Description
      XmlTokenStream​(javax.xml.stream.XMLStreamReader xmlReader, com.fasterxml.jackson.core.io.ContentReference sourceRef, int formatFeatures)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected static boolean _allWs​(java.lang.String str)  
      protected java.lang.String _currentStateDesc()  
      protected int _handleRepeatElement()
      Method called to handle details of repeating "virtual" start/end elements, needed for handling 'unwrapped' lists.
      protected java.lang.String _stateDesc​(int state)  
      void close()  
      void closeCompletely()  
      com.fasterxml.jackson.core.JsonLocation getCurrentLocation()  
      int getCurrentToken()  
      java.lang.String getLocalName()
      Accessor for local name of current named event (that is, XML_START_ELEMENT or XML_ATTRIBUTE_NAME).
      java.lang.String getNamespaceURI()  
      java.lang.String getText()  
      com.fasterxml.jackson.core.JsonLocation getTokenLocation()  
      org.codehaus.stax2.XMLStreamReader2 getXmlReader()  
      boolean hasXsiNil()  
      int initialize()
      Second part of initialization, to be called immediately after construction
      int next()  
      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.
      protected void repeatStartElement()
      Method used to add virtual wrapping, which just duplicates START_ELEMENT stream points to, and its matching closing element.
      protected void setFormatFeatures​(int f)  
      protected void skipAttributes()
      Method called to skip any attributes current START_ELEMENT may have, so that they are not returned as token.
      void skipEndElement()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • XML_DELAYED_START_ELEMENT

        public static final int XML_DELAYED_START_ELEMENT
        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 which FromXmlParser.Features are enabled.
      • _cfgProcessXsiNil

        protected boolean _cfgProcessXsiNil
      • _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 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 to next() should simply be given what was already read.
        Since:
        2.12
      • _repeatElement

        protected int _repeatElement
        Flag used to indicate that given element should be "replayed".
      • _currentWrapper

        protected com.fasterxml.jackson.dataformat.xml.deser.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)
    • Method Detail

      • initialize

        public int initialize()
                       throws javax.xml.stream.XMLStreamException
        Second 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.IOException
        javax.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_ELEMENT or XML_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 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
      • _handleRepeatElement

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

        protected static boolean _allWs​(java.lang.String str)
      • _currentStateDesc

        protected java.lang.String _currentStateDesc()
      • _stateDesc

        protected java.lang.String _stateDesc​(int state)