org.codehaus.jackson.node

## Class TreeTraversingParser

- java.lang.Object
- - org.codehaus.jackson.JsonParser
  - - org.codehaus.jackson.impl.JsonParserMinimalBase
    - - org.codehaus.jackson.node.TreeTraversingParser

- All Implemented Interfaces:
    Closeable, AutoCloseable, Versioned

      public class TreeTraversingParser
      extends JsonParserMinimalBase

  Facade over `JsonNode` that implements `JsonParser` to allow accessing contents of JSON tree in alternate form (stream of tokens). Useful when a streaming source is expected by code, such as data binding functionality.
  Since:
    1.3
  Author:
    tatu

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.codehaus.jackson.JsonParser

      `JsonParser.Feature, JsonParser.NumberType`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected boolean` | `_closed` Flag that indicates whether parser is closed or not.
    `protected JsonToken` | `_nextToken` Sometimes parser needs to buffer a single look-ahead token; if so, it'll be stored here.
    `protected org.codehaus.jackson.node.NodeCursor` | `_nodeCursor` Traversal context within tree
    `protected ObjectCodec` | `_objectCodec`
    `protected boolean` | `_startContainer` Flag needed to handle recursion into contents of child Array/Object nodes.

    - ### Fields inherited from class org.codehaus.jackson.impl.JsonParserMinimalBase

      `INT_APOSTROPHE, INT_ASTERISK, INT_b, INT_BACKSLASH, INT_COLON, INT_COMMA, INT_CR, INT_f, INT_LBRACKET, INT_LCURLY, INT_LF, INT_n, INT_QUOTE, INT_r, INT_RBRACKET, INT_RCURLY, INT_SLASH, INT_SPACE, INT_t, INT_TAB, INT_u`

    - ### Fields inherited from class org.codehaus.jackson.JsonParser

      `_currToken, _features, _lastClearedToken`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `TreeTraversingParser(JsonNode n)`
    `TreeTraversingParser(JsonNode n, ObjectCodec codec)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `_handleEOF()` Method sub-classes need to implement
    `void` | `close()` Closes the parser so that no further iteration or data access can be made; will also close the underlying input source if parser either owns the input source, or feature `JsonParser.Feature.AUTO_CLOSE_SOURCE` is enabled.
    `protected JsonNode` | `currentNode()`
    `protected JsonNode` | `currentNumericNode()`
    `BigInteger` | `getBigIntegerValue()` Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_INT` and it can not be used as a Java long primitive type due to its magnitude.
    `byte[]` | `getBinaryValue(Base64Variant b64variant)` Method that can be used to read (and consume -- results may not be accessible using other methods after the call) base64-encoded binary data included in the current textual JSON value.
    `ObjectCodec` | `getCodec()` Accessor for `ObjectCodec` associated with this parser, if any.
    `JsonLocation` | `getCurrentLocation()` Method that returns location of the last processed character; usually for error reporting purposes.
    `String` | `getCurrentName()` Method that can be called to get the name associated with the current token: for `JsonToken.FIELD_NAME`s it will be the same as what `JsonParser.getText()` returns; for field values it will be preceding field name; and for others (array values, root-level values) null.
    `BigDecimal` | `getDecimalValue()` Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_FLOAT` or `JsonToken.VALUE_NUMBER_INT`.
    `double` | `getDoubleValue()` Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_FLOAT` and it can be expressed as a Java double primitive type.
    `Object` | `getEmbeddedObject()` Accessor that can be called if (and only if) the current token is `JsonToken.VALUE_EMBEDDED_OBJECT`.
    `float` | `getFloatValue()` Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_FLOAT` and it can be expressed as a Java float primitive type.
    `int` | `getIntValue()` Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_INT` and it can be expressed as a value of Java int primitive type.
    `long` | `getLongValue()` Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_INT` and it can be expressed as a Java long primitive type.
    `JsonParser.NumberType` | `getNumberType()` If current token is of type `JsonToken.VALUE_NUMBER_INT` or `JsonToken.VALUE_NUMBER_FLOAT`, returns one of `JsonParser.NumberType` constants; otherwise returns null.
    `Number` | `getNumberValue()` Generic number value accessor method that will work for all kinds of numeric values.
    `JsonStreamContext` | `getParsingContext()` Method that can be used to access current parsing context reader is in.
    `String` | `getText()` Method for accessing textual representation of the current token; if no current token (before first call to `JsonParser.nextToken()`, or after encountering end-of-input), returns null.
    `char[]` | `getTextCharacters()` Method similar to `JsonParser.getText()`, but that will return underlying (unmodifiable) character array that contains textual value, instead of constructing a String object to contain this information.
    `int` | `getTextLength()` Accessor used with `JsonParser.getTextCharacters()`, to know length of String stored in returned buffer.
    `int` | `getTextOffset()` Accessor used with `JsonParser.getTextCharacters()`, to know offset of the first text content character within buffer.
    `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.
    `boolean` | `hasTextCharacters()` Method that can be used to determine whether calling of `JsonParser.getTextCharacters()` would be the most efficient way to access textual content for the event parser currently points to.
    `boolean` | `isClosed()` Method that can be called to determine whether this parser is closed or not.
    `JsonToken` | `nextToken()` Main iteration method, which will advance stream enough to determine type of the next token, if any.
    `void` | `setCodec(ObjectCodec c)` Setter that allows defining `ObjectCodec` associated with this parser, if any.
    `JsonParser` | `skipChildren()` Method that will skip all child tokens of an array or object token that the parser currently points to, iff stream points to `JsonToken.START_OBJECT` or `JsonToken.START_ARRAY`.

    - ### Methods inherited from class org.codehaus.jackson.impl.JsonParserMinimalBase

      `_constructError, _decodeBase64, _getCharDesc, _handleUnrecognizedCharacterEscape, _reportBase64EOF, _reportError, _reportInvalidBase64, _reportInvalidEOF, _reportInvalidEOF, _reportInvalidEOFInValue, _reportUnexpectedChar, _throwInternal, _throwInvalidSpace, _throwUnquotedSpace, _wrapError, getValueAsBoolean, getValueAsDouble, getValueAsInt, getValueAsLong`

    - ### Methods inherited from class org.codehaus.jackson.JsonParser

      `_constructError, canUseSchema, clearCurrentToken, configure, disable, disableFeature, enable, enableFeature, getBinaryValue, getBooleanValue, getByteValue, getCurrentToken, getInputSource, getLastClearedToken, getShortValue, getValueAsBoolean, getValueAsDouble, getValueAsInt, getValueAsLong, hasCurrentToken, isEnabled, isExpectedStartArrayToken, isFeatureEnabled, nextBooleanValue, nextFieldName, nextIntValue, nextLongValue, nextTextValue, nextValue, readValueAs, readValueAs, readValueAsTree, readValuesAs, readValuesAs, releaseBuffered, releaseBuffered, setFeature, setSchema, version`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### _objectCodec

          protected ObjectCodec _objectCodec

    - #### _nodeCursor

          protected org.codehaus.jackson.node.NodeCursor _nodeCursor

      Traversal context within tree

    - #### _nextToken

          protected JsonToken _nextToken

      Sometimes parser needs to buffer a single look-ahead token; if so, it'll be stored here. This is currently used for handling

    - #### _startContainer

          protected boolean _startContainer

      Flag needed to handle recursion into contents of child Array/Object nodes.

    - #### _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.

  - ### Constructor Detail

    - #### TreeTraversingParser

          public TreeTraversingParser(JsonNode n)

    - #### TreeTraversingParser

          public TreeTraversingParser(JsonNode n,
                              ObjectCodec codec)

  - ### Method Detail

    - #### setCodec

          public void setCodec(ObjectCodec c)

      Description copied from class: `JsonParser`
      Setter that allows defining `ObjectCodec` associated with this parser, if any. Codec is used by `JsonParser.readValueAs(Class)` method (and its variants).
      Specified by:
        `setCodec` in class `JsonParser`

    - #### getCodec

          public ObjectCodec getCodec()

      Description copied from class: `JsonParser`
      Accessor for `ObjectCodec` associated with this parser, if any. Codec is used by `JsonParser.readValueAs(Class)` method (and its variants).
      Specified by:
        `getCodec` in class `JsonParser`

    - #### close

          public void close()
                     throws IOException

      Description copied from class: `JsonParser`
      Closes the parser so that no further iteration or data access can be made; will also close the underlying input source if parser either owns the input source, or feature `JsonParser.Feature.AUTO_CLOSE_SOURCE` is enabled. Whether parser owns the input source depends on factory method that was used to construct instance (so check `JsonFactory` for details, but the general idea is that if caller passes in closable resource (such as `InputStream` or `Reader`) parser does NOT own the source; but if it passes a reference (such as `File` or `URL` and creates stream or reader it does own them.
      Specified by:
        `close` in interface `Closeable`
      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in class `JsonParserMinimalBase`
      Throws:
        `IOException`

    - #### nextToken

          public JsonToken nextToken()
                              throws IOException,
                                     JsonParseException

      Description copied from class: `JsonParser`
      Main iteration method, which will advance stream enough to determine type of the next token, if any. If none remaining (stream has no content other than possible white space before ending), null will be returned.
      Specified by:
        `nextToken` in class `JsonParserMinimalBase`
      Returns:
        Next token from the stream, if any found, or null to indicate end-of-input
      Throws:
        `IOException`
        `JsonParseException`

    - #### skipChildren

          public JsonParser skipChildren()
                                  throws IOException,
                                         JsonParseException

      Description copied from class: `JsonParser`
      Method that will skip all child tokens of an array or object token that the parser currently points to, iff stream points to `JsonToken.START_OBJECT` or `JsonToken.START_ARRAY`. If not, it will do nothing. After skipping, stream will point to matching `JsonToken.END_OBJECT` or `JsonToken.END_ARRAY` (possibly skipping nested pairs of START/END OBJECT/ARRAY tokens as well as value tokens). The idea is that after calling this method, application will call `JsonParser.nextToken()` to point to the next available token, if any.
      Overrides:
        `skipChildren` in class `JsonParserMinimalBase`
      Throws:
        `IOException`
        `JsonParseException`

    - #### isClosed

          public boolean isClosed()

      Description copied from class: `JsonParser`
      Method that can be called to determine whether this parser is closed or not. If it is closed, no new tokens can be retrieved by calling `JsonParser.nextToken()` (and the underlying stream may be closed). Closing may be due to an explicit call to `JsonParser.close()` or because parser has encountered end of input.
      Specified by:
        `isClosed` in class `JsonParserMinimalBase`

    - #### getCurrentName

          public String getCurrentName()

      Description copied from class: `JsonParser`
      Method that can be called to get the name associated with the current token: for `JsonToken.FIELD_NAME`s it will be the same as what `JsonParser.getText()` returns; for field values it will be preceding field name; and for others (array values, root-level values) null.
      Specified by:
        `getCurrentName` in class `JsonParserMinimalBase`

    - #### getParsingContext

          public JsonStreamContext getParsingContext()

      Description copied from class: `JsonParser`
      Method that can be used to access current parsing context reader is in. There are 3 different types: root, array and object contexts, with slightly different available information. Contexts are hierarchically nested, and can be used for example for figuring out part of the input document that correspond to specific array or object (for highlighting purposes, or error reporting). Contexts can also be used for simple xpath-like matching of input, if so desired.
      Specified by:
        `getParsingContext` in class `JsonParserMinimalBase`

    - #### getTokenLocation

          public JsonLocation getTokenLocation()

      Description copied from class: `JsonParser`
      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 `JsonParser`

    - #### getCurrentLocation

          public JsonLocation getCurrentLocation()

      Description copied from class: `JsonParser`
      Method that returns location of the last processed character; usually for error reporting purposes.
      Specified by:
        `getCurrentLocation` in class `JsonParser`

    - #### getText

          public String getText()

      Description copied from class: `JsonParser`
      Method for accessing textual representation of the current token; if no current token (before first call to `JsonParser.nextToken()`, or after encountering end-of-input), returns null. Method can be called for any token type.
      Specified by:
        `getText` in class `JsonParserMinimalBase`

    - #### getTextCharacters

          public char[] getTextCharacters()
                                   throws IOException,
                                          JsonParseException

      Description copied from class: `JsonParser`
      Method similar to `JsonParser.getText()`, but that will return underlying (unmodifiable) character array that contains textual value, instead of constructing a String object to contain this information. Note, however, that:
      - Textual contents are not guaranteed to start at index 0 (rather, call `JsonParser.getTextOffset()`) to know the actual offset
      - Length of textual contents may be less than the length of returned buffer: call `JsonParser.getTextLength()` for actual length of returned content.

      Note that caller MUST NOT modify the returned character array in any way -- doing so may corrupt current parser state and render parser instance useless.

      The only reason to call this method (over `JsonParser.getText()`) is to avoid construction of a String object (which will make a copy of contents).

      Specified by:
        `getTextCharacters` in class `JsonParserMinimalBase`
      Throws:
        `IOException`
        `JsonParseException`

    - #### getTextLength

          public int getTextLength()
                            throws IOException,
                                   JsonParseException

      Description copied from class: `JsonParser`
      Accessor used with `JsonParser.getTextCharacters()`, to know length of String stored in returned buffer.
      Specified by:
        `getTextLength` in class `JsonParserMinimalBase`
      Returns:
        Number of characters within buffer returned by `JsonParser.getTextCharacters()` that are part of textual content of the current token.
      Throws:
        `IOException`
        `JsonParseException`

    - #### getTextOffset

          public int getTextOffset()
                            throws IOException,
                                   JsonParseException

      Description copied from class: `JsonParser`
      Accessor used with `JsonParser.getTextCharacters()`, to know offset of the first text content character within buffer.
      Specified by:
        `getTextOffset` in class `JsonParserMinimalBase`
      Returns:
        Offset of the first character within buffer returned by `JsonParser.getTextCharacters()` that is part of textual content of the current token.
      Throws:
        `IOException`
        `JsonParseException`

    - #### hasTextCharacters

          public boolean hasTextCharacters()

      Description copied from class: `JsonParser`
      Method that can be used to determine whether calling of `JsonParser.getTextCharacters()` would be the most efficient way to access textual content for the event parser currently points to.

      Default implementation simply returns false since only actual implementation class has knowledge of its internal buffering state. Implementations are strongly encouraged to properly override this method, to allow efficient copying of content by other code.

      Specified by:
        `hasTextCharacters` in class `JsonParserMinimalBase`
      Returns:
        True if parser currently has character array that can be efficiently returned via `JsonParser.getTextCharacters()`; false means that it may or may not exist

    - #### getNumberType

          public JsonParser.NumberType getNumberType()
                                              throws IOException,
                                                     JsonParseException

      Description copied from class: `JsonParser`
      If current token is of type `JsonToken.VALUE_NUMBER_INT` or `JsonToken.VALUE_NUMBER_FLOAT`, returns one of `JsonParser.NumberType` constants; otherwise returns null.
      Specified by:
        `getNumberType` in class `JsonParser`
      Throws:
        `IOException`
        `JsonParseException`

    - #### getBigIntegerValue

          public BigInteger getBigIntegerValue()
                                        throws IOException,
                                               JsonParseException

      Description copied from class: `JsonParser`
      Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_INT` and it can not be used as a Java long primitive type due to its magnitude. It can also be called for `JsonToken.VALUE_NUMBER_FLOAT`; if so, it is equivalent to calling `JsonParser.getDecimalValue()` and then constructing a `BigInteger` from that value.
      Specified by:
        `getBigIntegerValue` in class `JsonParser`
      Throws:
        `IOException`
        `JsonParseException`

    - #### getDecimalValue

          public BigDecimal getDecimalValue()
                                     throws IOException,
                                            JsonParseException

      Description copied from class: `JsonParser`
      Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_FLOAT` or `JsonToken.VALUE_NUMBER_INT`. No under/overflow exceptions are ever thrown.
      Specified by:
        `getDecimalValue` in class `JsonParser`
      Throws:
        `IOException`
        `JsonParseException`

    - #### getDoubleValue

          public double getDoubleValue()
                                throws IOException,
                                       JsonParseException

      Description copied from class: `JsonParser`
      Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_FLOAT` and it can be expressed as a Java double primitive type. It can also be called for `JsonToken.VALUE_NUMBER_INT`; if so, it is equivalent to calling `JsonParser.getLongValue()` and then casting; except for possible overflow/underflow exception.

      Note: if the value falls outside of range of Java double, a `JsonParseException` will be thrown to indicate numeric overflow/underflow.

      Specified by:
        `getDoubleValue` in class `JsonParser`
      Throws:
        `IOException`
        `JsonParseException`

    - #### getFloatValue

          public float getFloatValue()
                              throws IOException,
                                     JsonParseException

      Description copied from class: `JsonParser`
      Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_FLOAT` and it can be expressed as a Java float primitive type. It can also be called for `JsonToken.VALUE_NUMBER_INT`; if so, it is equivalent to calling `JsonParser.getLongValue()` and then casting; except for possible overflow/underflow exception.

      Note: if the value falls outside of range of Java float, a `JsonParseException` will be thrown to indicate numeric overflow/underflow.

      Specified by:
        `getFloatValue` in class `JsonParser`
      Throws:
        `IOException`
        `JsonParseException`

    - #### getLongValue

          public long getLongValue()
                            throws IOException,
                                   JsonParseException

      Description copied from class: `JsonParser`
      Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_INT` and it can be expressed as a Java long primitive type. It can also be called for `JsonToken.VALUE_NUMBER_FLOAT`; if so, it is equivalent to calling `JsonParser.getDoubleValue()` and then casting to int; except for possible overflow/underflow exception.

      Note: if the token is an integer, but its value falls outside of range of Java long, a `JsonParseException` may be thrown to indicate numeric overflow/underflow.

      Specified by:
        `getLongValue` in class `JsonParser`
      Throws:
        `IOException`
        `JsonParseException`

    - #### getIntValue

          public int getIntValue()
                          throws IOException,
                                 JsonParseException

      Description copied from class: `JsonParser`
      Numeric accessor that can be called when the current token is of type `JsonToken.VALUE_NUMBER_INT` and it can be expressed as a value of Java int primitive type. It can also be called for `JsonToken.VALUE_NUMBER_FLOAT`; if so, it is equivalent to calling `JsonParser.getDoubleValue()` and then casting; except for possible overflow/underflow exception.

      Note: if the resulting integer value falls outside range of Java int, a `JsonParseException` may be thrown to indicate numeric overflow/underflow.

      Specified by:
        `getIntValue` in class `JsonParser`
      Throws:
        `IOException`
        `JsonParseException`

    - #### getNumberValue

          public Number getNumberValue()
                                throws IOException,
                                       JsonParseException

      Description copied from class: `JsonParser`
      Generic number value accessor method that will work for all kinds of numeric values. It will return the optimal (simplest/smallest possible) wrapper object that can express the numeric value just parsed.
      Specified by:
        `getNumberValue` in class `JsonParser`
      Throws:
        `IOException`
        `JsonParseException`

    - #### getEmbeddedObject

          public Object getEmbeddedObject()

      Description copied from class: `JsonParser`
      Accessor that can be called if (and only if) the current token is `JsonToken.VALUE_EMBEDDED_OBJECT`. For other token types, null is returned.

      Note: only some specialized parser implementations support embedding of objects (usually ones that are facades on top of non-streaming sources, such as object trees).

      Overrides:
        `getEmbeddedObject` in class `JsonParser`

    - #### getBinaryValue

          public byte[] getBinaryValue(Base64Variant b64variant)
                                throws IOException,
                                       JsonParseException

      Description copied from class: `JsonParser`
      Method that can be used to read (and consume -- results may not be accessible using other methods after the call) base64-encoded binary data included in the current textual JSON value. It works similar to getting String value via `JsonParser.getText()` and decoding result (except for decoding part), but should be significantly more performant.

      Note that non-decoded textual contents of the current token are not guaranteed to be accessible after this method is called. Current implementation, for example, clears up textual content during decoding. Decoded binary content, however, will be retained until parser is advanced to the next event.

      Specified by:
        `getBinaryValue` in class `JsonParserMinimalBase`
      Parameters:
        `b64variant` - Expected variant of base64 encoded content (see `Base64Variants` for definitions of "standard" variants).
      Returns:
        Decoded binary data
      Throws:
        `IOException`
        `JsonParseException`

    - #### currentNode

          protected JsonNode currentNode()

    - #### currentNumericNode

          protected JsonNode currentNumericNode()
                                         throws JsonParseException

      Throws:
        `JsonParseException`

    - #### _handleEOF

          protected void _handleEOF()
                             throws JsonParseException

      Description copied from class: `JsonParserMinimalBase`
      Method sub-classes need to implement
      Specified by:
        `_handleEOF` in class `JsonParserMinimalBase`
      Throws:
        `JsonParseException`