Class FromXmlParser

java.lang.Object
com.fasterxml.jackson.core.JsonParser
com.fasterxml.jackson.core.base.ParserMinimalBase
com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser
All Implemented Interfaces:
com.fasterxml.jackson.core.Versioned, ElementWrappable, Closeable, AutoCloseable

public class FromXmlParser extends com.fasterxml.jackson.core.base.ParserMinimalBase implements ElementWrappable
JsonParser implementation that exposes XML structure as set of JSON events that can be used for data binding.
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static enum 
    Enumeration that defines all togglable features for XML parsers.

    Nested classes/interfaces inherited from class com.fasterxml.jackson.core.JsonParser

    com.fasterxml.jackson.core.JsonParser.NumberType
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected byte[]
    We will hold on to decoded binary data, for duration of current event, so that multiple calls to getBinaryValue(com.fasterxml.jackson.core.Base64Variant) will not need to decode data more than once.
    protected com.fasterxml.jackson.core.util.ByteArrayBuilder
    ByteArrayBuilder is needed if 'getBinaryValue' is called.
    protected String
    In cases where a start element has both attributes and non-empty textual value, we have to create a bogus property; we will use this as the property name.
    protected boolean
    Flag that indicates whether parser is closed or not.
    protected String
     
    protected int
    Bit flag composed of bits that indicate which FromXmlParser.Features are enabled.
    protected final com.fasterxml.jackson.core.io.IOContext
     
    protected boolean
    We need special handling to keep track of whether a value may be exposed as simple leaf value.
    protected boolean
    Additional flag that is strictly needed when exposing "mixed" leading String value as "anonymous" property/string pair.
    protected com.fasterxml.jackson.core.JsonToken
     
    protected BigInteger
     
    protected int
     
    protected long
     
    protected int
    Bitfield that indicates which numeric representations have been calculated for the current type
    protected com.fasterxml.jackson.core.ObjectCodec
     
    protected XmlReadContext
    Information about parser context, context in which the next token is to be parsed (root, array, object).
    protected final com.fasterxml.jackson.core.StreamReadConstraints
     
    protected final XmlTokenStream
     
    static final String
    The default name placeholder for XML text segments is empty String ("").
    protected static final com.fasterxml.jackson.core.util.JacksonFeatureSet<com.fasterxml.jackson.core.StreamReadCapability>
    XML format has some peculiarities, indicated via new (2.12) capability system.

    Fields inherited from class com.fasterxml.jackson.core.base.ParserMinimalBase

    _currToken, _lastClearedToken, BD_MAX_INT, BD_MAX_LONG, BD_MIN_INT, BD_MIN_LONG, BI_MAX_INT, BI_MAX_LONG, BI_MIN_INT, BI_MIN_LONG, CHAR_NULL, INT_0, INT_9, INT_APOS, INT_ASTERISK, INT_BACKSLASH, INT_COLON, INT_COMMA, INT_CR, INT_e, INT_E, INT_HASH, INT_LBRACKET, INT_LCURLY, INT_LF, INT_MINUS, INT_PERIOD, INT_PLUS, INT_QUOTE, INT_RBRACKET, INT_RCURLY, INT_SLASH, INT_SPACE, INT_TAB, MAX_ERROR_TOKEN_LENGTH, MAX_INT_D, MAX_INT_L, MAX_LONG_D, MIN_INT_D, MIN_INT_L, MIN_LONG_D, NO_BYTES, NO_INTS, NR_BIGDECIMAL, NR_BIGINT, NR_DOUBLE, NR_FLOAT, NR_INT, NR_LONG, NR_UNKNOWN

    Fields inherited from class com.fasterxml.jackson.core.JsonParser

    _features, _requestPayload, DEFAULT_READ_CAPABILITIES
  • Constructor Summary

    Constructors
    Constructor
    Description
    FromXmlParser(com.fasterxml.jackson.core.io.IOContext ctxt, int genericParserFeatures, int xmlFeatures, com.fasterxml.jackson.core.ObjectCodec codec, XMLStreamReader xmlReader, XmlNameProcessor tagProcessor)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected final void
    _checkNumericValue(int expType)
     
    protected BigDecimal
     
    protected void
     
    protected double
     
    protected float
     
    protected void
     
    protected void
     
    protected byte[]
    _decodeBase64(com.fasterxml.jackson.core.Base64Variant b64variant)
     
    protected com.fasterxml.jackson.core.util.ByteArrayBuilder
     
    protected void
    Method called when an EOF is encountered between tokens.
    private <T> T
     
    protected final int
     
    protected int
     
    protected void
    Method called to release internal buffers owned by the base parser.
    protected void
     
    private void
    _updateState(com.fasterxml.jackson.core.JsonToken t)
     
    void
    addVirtualWrapping(Set<String> namesToWrap0, boolean caseInsensitive)
    Method that may be called to indicate that specified names (only local parts retained currently: this may be changed in future) should be considered "auto-wrapping", meaning that they will be doubled to contain two opening elements, two matching closing elements.
    boolean
     
    boolean
     
    void
     
    configure(FromXmlParser.Feature f, boolean state)
     
     
     
     
    byte[]
    getBinaryValue(com.fasterxml.jackson.core.Base64Variant b64variant)
     
    com.fasterxml.jackson.core.ObjectCodec
     
    com.fasterxml.jackson.core.JsonLocation
    Method that returns location of the last processed character; usually for error reporting purposes
    Method that can be called to get the name associated with the current event.
     
    double
     
     
    float
     
    int
     
    int
     
    long
     
    com.fasterxml.jackson.core.JsonParser.NumberType
     
     
     
    com.fasterxml.jackson.core.util.JacksonFeatureSet<com.fasterxml.jackson.core.StreamReadCapability>
     
    Method that allows application direct access to underlying Stax XMLStreamWriter.
     
    int
    getText(Writer writer)
     
    char[]
     
    int
     
    int
     
    com.fasterxml.jackson.core.JsonLocation
    Method that return the starting location of the current token; that is, position of the first character from input that starts the current token.
    boolean
    XML input actually would offer access to character arrays; but since we must coalesce things it cannot really be exposed.
    boolean
     
    final boolean
     
    boolean
    Since xml representation can not really distinguish between different scalar types (numbers, booleans) -- they are all just Character Data, without schema -- we can try to infer type from intent here.
    boolean
    Since xml representation can not really distinguish between array and object starts (both are represented with elements), this method is overridden and taken to mean that expecation is that the current start element is to mean 'start array', instead of default of 'start object'.
    boolean
     
    Method overridden to support more reliable deserialization of String collections.
    com.fasterxml.jackson.core.JsonToken
     
    void
     
    com.fasterxml.jackson.core.JsonParser
    overrideFormatFeatures(int values, int mask)
     
    boolean
    XML format does require support from custom ObjectCodec (that is, XmlMapper), so need to return true here.
    void
    setCodec(com.fasterxml.jackson.core.ObjectCodec c)
     
    void
     
    com.fasterxml.jackson.core.StreamReadConstraints
     
    com.fasterxml.jackson.core.Version
     

    Methods inherited from class com.fasterxml.jackson.core.base.ParserMinimalBase

    _ascii, _asciiBytes, _constructError, _decodeBase64, _getCharDesc, _hasTextualNull, _longIntegerDesc, _longNumberDesc, _reportError, _reportError, _reportError, _reportInputCoercion, _reportInvalidEOF, _reportInvalidEOF, _reportInvalidEOF, _reportInvalidEOFInValue, _reportInvalidEOFInValue, _reportMissingRootWS, _reportUnexpectedChar, _reportUnexpectedNumberChar, _throwInternal, _throwInvalidSpace, _wrapError, clearCurrentToken, currentToken, currentTokenId, getCurrentToken, getCurrentTokenId, getLastClearedToken, getValueAsBoolean, getValueAsDouble, getValueAsInt, getValueAsInt, getValueAsLong, getValueAsLong, getValueAsString, getValueAsString, hasCurrentToken, hasToken, hasTokenId, isExpectedStartObjectToken, nextValue, reportInvalidNumber, reportOverflowInt, reportOverflowInt, reportOverflowInt, reportOverflowLong, reportOverflowLong, reportOverflowLong, reportUnexpectedNumberChar, skipChildren

    Methods inherited from class com.fasterxml.jackson.core.JsonParser

    _codec, _constructError, _constructReadException, _constructReadException, _constructReadException, _constructReadException, _constructReadException, _reportUnsupportedOperation, assignCurrentValue, canParseAsync, canUseSchema, configure, currentLocation, currentName, currentTokenLocation, currentValue, disable, enable, finishToken, getBinaryValue, getBooleanValue, getByteValue, getCurrentValue, getFeatureMask, getInputSource, getNonBlockingInputFeeder, getNumberValueDeferred, getNumberValueExact, getObjectId, getSchema, getShortValue, getTypeId, getValueAsBoolean, getValueAsDouble, isEnabled, isEnabled, nextBooleanValue, nextFieldName, nextFieldName, nextIntValue, nextLongValue, overrideStdFeatures, readBinaryValue, readBinaryValue, readValueAs, readValueAs, readValueAsTree, readValuesAs, readValuesAs, releaseBuffered, releaseBuffered, setCurrentValue, setFeatureMask, setRequestPayloadOnError, setRequestPayloadOnError, setRequestPayloadOnError, setSchema

    Methods inherited from class java.lang.Object

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

    • DEFAULT_UNNAMED_TEXT_PROPERTY

      public static final String DEFAULT_UNNAMED_TEXT_PROPERTY
      The default name placeholder for XML text segments is empty String ("").
      See Also:
    • XML_READ_CAPABILITIES

      protected static final com.fasterxml.jackson.core.util.JacksonFeatureSet<com.fasterxml.jackson.core.StreamReadCapability> XML_READ_CAPABILITIES
      XML format has some peculiarities, indicated via new (2.12) capability system.
      Since:
      2.12
    • _cfgNameForTextElement

      protected String _cfgNameForTextElement
      In cases where a start element has both attributes and non-empty textual value, we have to create a bogus property; we will use this as the property name.

      Name used for pseudo-property used for returning XML Text value (which does not have actual element name to use). Defaults to empty String, but may be changed for inter-operability reasons: JAXB, for example, uses "value" as name.

      Since:
      2.1
    • _formatFeatures

      protected int _formatFeatures
      Bit flag composed of bits that indicate which FromXmlParser.Features are enabled.
    • _objectCodec

      protected com.fasterxml.jackson.core.ObjectCodec _objectCodec
    • _ioContext

      protected final com.fasterxml.jackson.core.io.IOContext _ioContext
    • _streamReadConstraints

      protected final com.fasterxml.jackson.core.StreamReadConstraints _streamReadConstraints
      Since:
      2.15
    • _closed

      protected boolean _closed
      Flag that indicates whether parser is closed or not. Gets set when parser is either closed by explicit call (close()) or when end-of-input is reached.
    • _parsingContext

      protected XmlReadContext _parsingContext
      Information about parser context, context in which the next token is to be parsed (root, array, object).
    • _xmlTokens

      protected final XmlTokenStream _xmlTokens
    • _mayBeLeaf

      protected boolean _mayBeLeaf
      We need special handling to keep track of whether a value may be exposed as simple leaf value.
    • _nextToken

      protected com.fasterxml.jackson.core.JsonToken _nextToken
    • _currText

      protected String _currText
    • _nextIsLeadingMixed

      protected boolean _nextIsLeadingMixed
      Additional flag that is strictly needed when exposing "mixed" leading String value as "anonymous" property/string pair. If so, code returns START_OBJECT first, sets _nextToken to be FIELD_NAME and sets this flag to indicate use of "anonymous" marker.
      Since:
      2.13
    • _byteArrayBuilder

      protected com.fasterxml.jackson.core.util.ByteArrayBuilder _byteArrayBuilder
      ByteArrayBuilder is needed if 'getBinaryValue' is called. If so, we better reuse it for remainder of content.
    • _binaryValue

      protected byte[] _binaryValue
      We will hold on to decoded binary data, for duration of current event, so that multiple calls to getBinaryValue(com.fasterxml.jackson.core.Base64Variant) will not need to decode data more than once.
    • _numTypesValid

      protected int _numTypesValid
      Bitfield that indicates which numeric representations have been calculated for the current type
    • _numberInt

      protected int _numberInt
    • _numberLong

      protected long _numberLong
    • _numberBigInt

      protected BigInteger _numberBigInt
  • Constructor Details

    • FromXmlParser

      public FromXmlParser(com.fasterxml.jackson.core.io.IOContext ctxt, int genericParserFeatures, int xmlFeatures, com.fasterxml.jackson.core.ObjectCodec codec, XMLStreamReader xmlReader, XmlNameProcessor tagProcessor) throws IOException
      Throws:
      IOException
  • Method Details

    • version

      public com.fasterxml.jackson.core.Version version()
      Specified by:
      version in interface com.fasterxml.jackson.core.Versioned
      Specified by:
      version in class com.fasterxml.jackson.core.JsonParser
    • getCodec

      public com.fasterxml.jackson.core.ObjectCodec getCodec()
      Specified by:
      getCodec in class com.fasterxml.jackson.core.JsonParser
    • setCodec

      public void setCodec(com.fasterxml.jackson.core.ObjectCodec c)
      Specified by:
      setCodec in class com.fasterxml.jackson.core.JsonParser
    • setXMLTextElementName

      public void setXMLTextElementName(String name)
      Since:
      2.1
    • requiresCustomCodec

      public boolean requiresCustomCodec()
      XML format does require support from custom ObjectCodec (that is, XmlMapper), so need to return true here.
      Overrides:
      requiresCustomCodec in class com.fasterxml.jackson.core.JsonParser
      Returns:
      True since XML format does require support from codec
    • canReadObjectId

      public boolean canReadObjectId()
      Overrides:
      canReadObjectId in class com.fasterxml.jackson.core.JsonParser
    • canReadTypeId

      public boolean canReadTypeId()
      Overrides:
      canReadTypeId in class com.fasterxml.jackson.core.JsonParser
    • getReadCapabilities

      public com.fasterxml.jackson.core.util.JacksonFeatureSet<com.fasterxml.jackson.core.StreamReadCapability> getReadCapabilities()
      Overrides:
      getReadCapabilities in class com.fasterxml.jackson.core.JsonParser
    • enable

    • disable

    • isEnabled

      public final boolean isEnabled(FromXmlParser.Feature f)
    • configure

      public FromXmlParser configure(FromXmlParser.Feature f, boolean state)
    • streamReadConstraints

      public com.fasterxml.jackson.core.StreamReadConstraints streamReadConstraints()
      Overrides:
      streamReadConstraints in class com.fasterxml.jackson.core.JsonParser
    • getFormatFeatures

      public int getFormatFeatures()
      Overrides:
      getFormatFeatures in class com.fasterxml.jackson.core.JsonParser
    • overrideFormatFeatures

      public com.fasterxml.jackson.core.JsonParser overrideFormatFeatures(int values, int mask)
      Overrides:
      overrideFormatFeatures in class com.fasterxml.jackson.core.JsonParser
    • getStaxReader

      public XMLStreamReader getStaxReader()
      Method that allows application direct access to underlying Stax XMLStreamWriter. Note that use of writer is discouraged, and may interfere with processing of this writer; however, occasionally it may be necessary.

      Note: writer instance will always be of type XMLStreamWriter2 (including Typed Access API) so upcasts are safe.

    • addVirtualWrapping

      public void addVirtualWrapping(Set<String> namesToWrap0, boolean caseInsensitive)
      Description copied from interface: ElementWrappable
      Method that may be called to indicate that specified names (only local parts retained currently: this may be changed in future) should be considered "auto-wrapping", meaning that they will be doubled to contain two opening elements, two matching closing elements. This is needed for supporting handling of so-called "unwrapped" array types, something XML mappings like JAXB often use.
      Specified by:
      addVirtualWrapping in interface ElementWrappable
    • getCurrentName

      public String getCurrentName() throws IOException
      Method that can be called to get the name associated with the current event.
      Specified by:
      getCurrentName in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • overrideCurrentName

      public void overrideCurrentName(String name)
      Specified by:
      overrideCurrentName in class com.fasterxml.jackson.core.base.ParserMinimalBase
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • isClosed

      public boolean isClosed()
      Specified by:
      isClosed in class com.fasterxml.jackson.core.base.ParserMinimalBase
    • getParsingContext

      public XmlReadContext getParsingContext()
      Specified by:
      getParsingContext in class com.fasterxml.jackson.core.base.ParserMinimalBase
    • getTokenLocation

      public com.fasterxml.jackson.core.JsonLocation getTokenLocation()
      Method that return the starting location of the current token; that is, position of the first character from input that starts the current token.
      Specified by:
      getTokenLocation in class com.fasterxml.jackson.core.JsonParser
    • getCurrentLocation

      public com.fasterxml.jackson.core.JsonLocation getCurrentLocation()
      Method that returns location of the last processed character; usually for error reporting purposes
      Specified by:
      getCurrentLocation in class com.fasterxml.jackson.core.JsonParser
    • isExpectedStartArrayToken

      public boolean isExpectedStartArrayToken()
      Since xml representation can not really distinguish between array and object starts (both are represented with elements), this method is overridden and taken to mean that expecation is that the current start element is to mean 'start array', instead of default of 'start object'.
      Overrides:
      isExpectedStartArrayToken in class com.fasterxml.jackson.core.base.ParserMinimalBase
    • isExpectedNumberIntToken

      public boolean isExpectedNumberIntToken()
      Since xml representation can not really distinguish between different scalar types (numbers, booleans) -- they are all just Character Data, without schema -- we can try to infer type from intent here. The main benefit is avoiding checks for coercion.
      Overrides:
      isExpectedNumberIntToken in class com.fasterxml.jackson.core.base.ParserMinimalBase
    • nextToken

      public com.fasterxml.jackson.core.JsonToken nextToken() throws IOException
      Specified by:
      nextToken in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • nextTextValue

      public String nextTextValue() throws IOException
      Method overridden to support more reliable deserialization of String collections.
      Overrides:
      nextTextValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • _updateState

      private void _updateState(com.fasterxml.jackson.core.JsonToken t)
    • getText

      public String getText() throws IOException
      Specified by:
      getText in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • getTextCharacters

      public char[] getTextCharacters() throws IOException
      Specified by:
      getTextCharacters in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • getTextLength

      public int getTextLength() throws IOException
      Specified by:
      getTextLength in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • getTextOffset

      public int getTextOffset() throws IOException
      Specified by:
      getTextOffset in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • hasTextCharacters

      public boolean hasTextCharacters()
      XML input actually would offer access to character arrays; but since we must coalesce things it cannot really be exposed.
      Specified by:
      hasTextCharacters in class com.fasterxml.jackson.core.base.ParserMinimalBase
    • getText

      public int getText(Writer writer) throws IOException
      Overrides:
      getText in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getEmbeddedObject

      public Object getEmbeddedObject() throws IOException
      Overrides:
      getEmbeddedObject in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getBinaryValue

      public byte[] getBinaryValue(com.fasterxml.jackson.core.Base64Variant b64variant) throws IOException
      Specified by:
      getBinaryValue in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • _decodeBase64

      protected byte[] _decodeBase64(com.fasterxml.jackson.core.Base64Variant b64variant) throws IOException
      Throws:
      IOException
    • isNaN

      public boolean isNaN()
      Overrides:
      isNaN in class com.fasterxml.jackson.core.JsonParser
    • getNumberType

      public com.fasterxml.jackson.core.JsonParser.NumberType getNumberType() throws IOException
      Specified by:
      getNumberType in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getNumberValue

      public Number getNumberValue() throws IOException
      Specified by:
      getNumberValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getIntValue

      public int getIntValue() throws IOException
      Specified by:
      getIntValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getLongValue

      public long getLongValue() throws IOException
      Specified by:
      getLongValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getBigIntegerValue

      public BigInteger getBigIntegerValue() throws IOException
      Specified by:
      getBigIntegerValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getFloatValue

      public float getFloatValue() throws IOException
      Specified by:
      getFloatValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getDoubleValue

      public double getDoubleValue() throws IOException
      Specified by:
      getDoubleValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getDecimalValue

      public BigDecimal getDecimalValue() throws IOException
      Specified by:
      getDecimalValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • _checkNumericValue

      protected final void _checkNumericValue(int expType) throws IOException
      Throws:
      IOException
    • _isIntNumber

      protected final int _isIntNumber(String text)
    • _convertNumberToInt

      protected void _convertNumberToInt() throws IOException
      Throws:
      IOException
    • _convertNumberToLong

      protected void _convertNumberToLong() throws IOException
      Throws:
      IOException
    • _convertNumberToBigInteger

      protected void _convertNumberToBigInteger() throws IOException
      Throws:
      IOException
    • _convertNumberToFloat

      protected float _convertNumberToFloat() throws IOException
      Throws:
      IOException
    • _convertNumberToDouble

      protected double _convertNumberToDouble() throws IOException
      Throws:
      IOException
    • _convertNumberToBigDecimal

      protected BigDecimal _convertNumberToBigDecimal() throws IOException
      Throws:
      IOException
    • _handleEOF

      protected void _handleEOF() throws com.fasterxml.jackson.core.JsonParseException
      Method called when an EOF is encountered between tokens. If so, it may be a legitimate EOF, but only iff there is no open non-root context.
      Specified by:
      _handleEOF in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      com.fasterxml.jackson.core.JsonParseException
    • _releaseBuffers

      protected void _releaseBuffers() throws IOException
      Method called to release internal buffers owned by the base parser.
      Throws:
      IOException
    • _getByteArrayBuilder

      protected com.fasterxml.jackson.core.util.ByteArrayBuilder _getByteArrayBuilder()
    • _internalErrorUnknownToken

      private <T> T _internalErrorUnknownToken(Object token)
    • _nextToken

      protected int _nextToken() throws IOException
      Throws:
      IOException
    • _skipEndElement

      protected void _skipEndElement() throws IOException
      Throws:
      IOException