Class ReaderBasedParser
- java.lang.Object
-
- org.codehaus.jackson.JsonParser
-
- org.codehaus.jackson.impl.JsonParserMinimalBase
-
- org.codehaus.jackson.impl.JsonParserBase
-
- org.codehaus.jackson.impl.ReaderBasedParser
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
,Versioned
public final class ReaderBasedParser extends JsonParserBase
This is a concrete implementation ofJsonParser
, which is based on aReader
to handle low-level character conversion tasks.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.codehaus.jackson.JsonParser
JsonParser.Feature, JsonParser.NumberType
-
-
Field Summary
Fields Modifier and Type Field Description protected char[]
_inputBuffer
Current buffer from which data is read; generally data is read into buffer from input source.protected ObjectCodec
_objectCodec
protected java.io.Reader
_reader
Reader that can be used for reading more content, if one buffer from input source, but in some cases pre-loaded buffer is handed to the parser.protected CharsToNameCanonicalizer
_symbols
protected boolean
_tokenIncomplete
Flag that indicates that the current token has not yet been fully processed, and needs to be finished for some access (or skipped to obtain the next token)-
Fields inherited from class org.codehaus.jackson.impl.JsonParserBase
_binaryValue, _byteArrayBuilder, _closed, _currInputProcessed, _currInputRow, _currInputRowStart, _expLength, _fractLength, _inputEnd, _inputPtr, _intLength, _ioContext, _nameCopied, _nameCopyBuffer, _nextToken, _numberBigDecimal, _numberBigInt, _numberDouble, _numberInt, _numberLong, _numberNegative, _numTypesValid, _parsingContext, _textBuffer, _tokenInputCol, _tokenInputRow, _tokenInputTotal, CHAR_NULL, INT_0, INT_1, INT_2, INT_3, INT_4, INT_5, INT_6, INT_7, INT_8, INT_9, INT_DECIMAL_POINT, INT_e, INT_E, INT_MINUS, INT_PLUS, NR_BIGDECIMAL, NR_BIGINT, NR_DOUBLE, NR_INT, NR_LONG, NR_UNKNOWN
-
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 Description ReaderBasedParser(IOContext ctxt, int features, java.io.Reader r, ObjectCodec codec, CharsToNameCanonicalizer st)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
_closeInput()
protected byte[]
_decodeBase64(Base64Variant b64variant)
Efficient handling for incremental parsing of base64-encoded textual content.protected char
_decodeEscaped()
Method that sub-classes must implement to support escaped sequences in base64-encoded sections.protected void
_finishString()
protected void
_finishString2()
protected java.lang.String
_getText2(JsonToken t)
protected JsonToken
_handleApostropheValue()
protected JsonToken
_handleInvalidNumberStart(int ch, boolean negative)
Method called if expected numeric value (due to leading sign) does not look like a numberprotected JsonToken
_handleUnexpectedValue(int i)
Method for handling cases where first non-space character of an expected value token is not legal for standard JSON content.protected java.lang.String
_handleUnusualFieldName(int i)
Method called when we see non-white space character other than double quote, when expecting a field name.protected void
_matchToken(java.lang.String matchStr, int i)
Helper method for checking whether input matches expected tokenprotected java.lang.String
_parseApostropheFieldName()
protected java.lang.String
_parseFieldName(int i)
protected void
_releaseBuffers()
Method called to release internal buffers owned by the base reader.protected void
_reportInvalidToken(java.lang.String matchedPart, java.lang.String msg)
protected void
_skipCR()
We actually need to check the character value here (to see if we have \n following \r).protected void
_skipLF()
protected void
_skipString()
Method called to skim through rest of unparsed String value, if it is not needed.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 featureJsonParser.Feature.AUTO_CLOSE_SOURCE
is enabled.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 forObjectCodec
associated with this parser, if any.java.lang.Object
getInputSource()
Method that can be used to get access to object that is used to access input being parsed; this is usually eitherInputStream
orReader
, depending on what parser was constructed with.protected char
getNextChar(java.lang.String eofMsg)
java.lang.String
getText()
Method for accessing textual representation of the current event; if no current event (before first call tonextToken()
, or after encountering end-of-input), returns null.char[]
getTextCharacters()
Method similar toJsonParser.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 withJsonParser.getTextCharacters()
, to know length of String stored in returned buffer.int
getTextOffset()
Accessor used withJsonParser.getTextCharacters()
, to know offset of the first text content character within buffer.protected boolean
loadMore()
java.lang.Boolean
nextBooleanValue()
Method that fetches next token (as if callingJsonParser.nextToken()
) and if it isJsonToken.VALUE_TRUE
orJsonToken.VALUE_FALSE
returns matching Boolean value; otherwise return null.int
nextIntValue(int defaultValue)
Method that fetches next token (as if callingJsonParser.nextToken()
) and if it isJsonToken.VALUE_NUMBER_INT
returns 32-bit int value; otherwise returns specified default value It is functionally equivalent to:long
nextLongValue(long defaultValue)
Method that fetches next token (as if callingJsonParser.nextToken()
) and if it isJsonToken.VALUE_NUMBER_INT
returns 64-bit long value; otherwise returns specified default value It is functionally equivalent to:java.lang.String
nextTextValue()
Method that fetches next token (as if callingJsonParser.nextToken()
) and if it isJsonToken.VALUE_STRING
returns contained String value; otherwise returns null.JsonToken
nextToken()
Main iteration method, which will advance stream enough to determine type of the next token, if any.protected JsonToken
parseNumberText(int ch)
Initial parsing method for number values.int
releaseBuffered(java.io.Writer w)
Method that can be called to push back any content that has been read but not consumed by the parser.void
setCodec(ObjectCodec c)
Setter that allows definingObjectCodec
associated with this parser, if any.-
Methods inherited from class org.codehaus.jackson.impl.JsonParserBase
_decodeBase64Escape, _decodeBase64Escape, _getByteArrayBuilder, _handleEOF, _parseNumericValue, _reportMismatchedEndMarker, convertNumberToBigDecimal, convertNumberToBigInteger, convertNumberToDouble, convertNumberToInt, convertNumberToLong, getBigIntegerValue, getCurrentLocation, getCurrentName, getDecimalValue, getDoubleValue, getFloatValue, getIntValue, getLongValue, getNumberType, getNumberValue, getParsingContext, getTokenCharacterOffset, getTokenColumnNr, getTokenLineNr, getTokenLocation, hasTextCharacters, isClosed, loadMoreGuaranteed, reportInvalidBase64Char, reportInvalidBase64Char, reportInvalidNumber, reportOverflowInt, reportOverflowLong, reportUnexpectedNumberChar, reset, resetAsNaN, resetFloat, resetInt, version
-
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, skipChildren
-
Methods inherited from class org.codehaus.jackson.JsonParser
_constructError, canUseSchema, clearCurrentToken, configure, disable, disableFeature, enable, enableFeature, getBinaryValue, getBooleanValue, getByteValue, getCurrentToken, getEmbeddedObject, getLastClearedToken, getShortValue, getValueAsBoolean, getValueAsDouble, getValueAsInt, getValueAsLong, hasCurrentToken, isEnabled, isExpectedStartArrayToken, isFeatureEnabled, nextFieldName, nextValue, readValueAs, readValueAs, readValueAsTree, readValuesAs, readValuesAs, releaseBuffered, setFeature, setSchema
-
-
-
-
Field Detail
-
_reader
protected java.io.Reader _reader
Reader that can be used for reading more content, if one buffer from input source, but in some cases pre-loaded buffer is handed to the parser.
-
_inputBuffer
protected char[] _inputBuffer
Current buffer from which data is read; generally data is read into buffer from input source.
-
_objectCodec
protected ObjectCodec _objectCodec
-
_symbols
protected final CharsToNameCanonicalizer _symbols
-
_tokenIncomplete
protected boolean _tokenIncomplete
Flag that indicates that the current token has not yet been fully processed, and needs to be finished for some access (or skipped to obtain the next token)
-
-
Constructor Detail
-
ReaderBasedParser
public ReaderBasedParser(IOContext ctxt, int features, java.io.Reader r, ObjectCodec codec, CharsToNameCanonicalizer st)
-
-
Method Detail
-
getCodec
public ObjectCodec getCodec()
Description copied from class:JsonParser
Accessor forObjectCodec
associated with this parser, if any. Codec is used byJsonParser.readValueAs(Class)
method (and its variants).- Specified by:
getCodec
in classJsonParser
-
setCodec
public void setCodec(ObjectCodec c)
Description copied from class:JsonParser
Setter that allows definingObjectCodec
associated with this parser, if any. Codec is used byJsonParser.readValueAs(Class)
method (and its variants).- Specified by:
setCodec
in classJsonParser
-
releaseBuffered
public int releaseBuffered(java.io.Writer w) throws java.io.IOException
Description copied from class:JsonParser
Method that can be called to push back any content that has been read but not consumed by the parser. This is usually done after reading all content of interest using parser. Content is released by writing it to given writer if possible; if underlying input is char-based it can released, if not (byte-based) it can not.- Overrides:
releaseBuffered
in classJsonParser
- Returns:
- -1 if the underlying content source is not char-based
(that is, input can not be sent to
Writer
; otherwise number of chars released (0 if there was nothing to release) - Throws:
java.io.IOException
- if write using Writer threw exception
-
getInputSource
public java.lang.Object getInputSource()
Description copied from class:JsonParser
Method that can be used to get access to object that is used to access input being parsed; this is usually eitherInputStream
orReader
, depending on what parser was constructed with. Note that returned value may be null in some cases; including case where parser implementation does not want to exposed raw source to caller. In cases where input has been decorated, object returned here is the decorated version; this allows some level of interaction between users of parser and decorator object.In general use of this accessor should be considered as "last effort", i.e. only used if no other mechanism is applicable.
- Overrides:
getInputSource
in classJsonParser
-
loadMore
protected final boolean loadMore() throws java.io.IOException
- Specified by:
loadMore
in classJsonParserBase
- Throws:
java.io.IOException
-
getNextChar
protected char getNextChar(java.lang.String eofMsg) throws java.io.IOException, JsonParseException
- Throws:
java.io.IOException
JsonParseException
-
_closeInput
protected void _closeInput() throws java.io.IOException
- Specified by:
_closeInput
in classJsonParserBase
- Throws:
java.io.IOException
-
_releaseBuffers
protected void _releaseBuffers() throws java.io.IOException
Method called to release internal buffers owned by the base reader. This may be called along with_closeInput()
(for example, when explicitly closing this reader instance), or separately (if need be).- Overrides:
_releaseBuffers
in classJsonParserBase
- Throws:
java.io.IOException
-
getText
public final java.lang.String getText() throws java.io.IOException, JsonParseException
Method for accessing textual representation of the current event; if no current event (before first call tonextToken()
, or after encountering end-of-input), returns null. Method can be called for any event.- Specified by:
getText
in classJsonParserMinimalBase
- Throws:
java.io.IOException
JsonParseException
-
_getText2
protected final java.lang.String _getText2(JsonToken t)
-
getTextCharacters
public char[] getTextCharacters() throws java.io.IOException, JsonParseException
Description copied from class:JsonParser
Method similar toJsonParser.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 classJsonParserMinimalBase
- Throws:
java.io.IOException
JsonParseException
- Textual contents are not guaranteed to start at
index 0 (rather, call
-
getTextLength
public int getTextLength() throws java.io.IOException, JsonParseException
Description copied from class:JsonParser
Accessor used withJsonParser.getTextCharacters()
, to know length of String stored in returned buffer.- Specified by:
getTextLength
in classJsonParserMinimalBase
- Returns:
- Number of characters within buffer returned
by
JsonParser.getTextCharacters()
that are part of textual content of the current token. - Throws:
java.io.IOException
JsonParseException
-
getTextOffset
public int getTextOffset() throws java.io.IOException, JsonParseException
Description copied from class:JsonParser
Accessor used withJsonParser.getTextCharacters()
, to know offset of the first text content character within buffer.- Specified by:
getTextOffset
in classJsonParserMinimalBase
- Returns:
- Offset of the first character within buffer returned
by
JsonParser.getTextCharacters()
that is part of textual content of the current token. - Throws:
java.io.IOException
JsonParseException
-
getBinaryValue
public byte[] getBinaryValue(Base64Variant b64variant) throws java.io.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 viaJsonParser.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 classJsonParserMinimalBase
- Parameters:
b64variant
- Expected variant of base64 encoded content (seeBase64Variants
for definitions of "standard" variants).- Returns:
- Decoded binary data
- Throws:
java.io.IOException
JsonParseException
-
nextToken
public JsonToken nextToken() throws java.io.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 classJsonParserMinimalBase
- Returns:
- Next token from the stream, if any found, or null to indicate end-of-input
- Throws:
java.io.IOException
JsonParseException
-
nextTextValue
public java.lang.String nextTextValue() throws java.io.IOException, JsonParseException
Description copied from class:JsonParser
Method that fetches next token (as if callingJsonParser.nextToken()
) and if it isJsonToken.VALUE_STRING
returns contained String value; otherwise returns null. It is functionally equivalent to:return (nextToken() == JsonToken.VALUE_STRING) ? getText() : null;
but may be faster for parser to process, and can therefore be used if caller expects to get a String value next from input.- Overrides:
nextTextValue
in classJsonParser
- Throws:
java.io.IOException
JsonParseException
-
nextIntValue
public int nextIntValue(int defaultValue) throws java.io.IOException, JsonParseException
Description copied from class:JsonParser
Method that fetches next token (as if callingJsonParser.nextToken()
) and if it isJsonToken.VALUE_NUMBER_INT
returns 32-bit int value; otherwise returns specified default value It is functionally equivalent to:return (nextToken() == JsonToken.VALUE_NUMBER_INT) ? getIntValue() : defaultValue;
but may be faster for parser to process, and can therefore be used if caller expects to get a String value next from input.- Overrides:
nextIntValue
in classJsonParser
- Throws:
java.io.IOException
JsonParseException
-
nextLongValue
public long nextLongValue(long defaultValue) throws java.io.IOException, JsonParseException
Description copied from class:JsonParser
Method that fetches next token (as if callingJsonParser.nextToken()
) and if it isJsonToken.VALUE_NUMBER_INT
returns 64-bit long value; otherwise returns specified default value It is functionally equivalent to:return (nextToken() == JsonToken.VALUE_NUMBER_INT) ? getLongValue() : defaultValue;
but may be faster for parser to process, and can therefore be used if caller expects to get a String value next from input.- Overrides:
nextLongValue
in classJsonParser
- Throws:
java.io.IOException
JsonParseException
-
nextBooleanValue
public java.lang.Boolean nextBooleanValue() throws java.io.IOException, JsonParseException
Description copied from class:JsonParser
Method that fetches next token (as if callingJsonParser.nextToken()
) and if it isJsonToken.VALUE_TRUE
orJsonToken.VALUE_FALSE
returns matching Boolean value; otherwise return null. It is functionally equivalent to:JsonToken t = nextToken(); if (t == JsonToken.VALUE_TRUE) return Boolean.TRUE; if (t == JsonToken.VALUE_FALSE) return Boolean.FALSE; return null;
but may be faster for parser to process, and can therefore be used if caller expects to get a String value next from input.- Overrides:
nextBooleanValue
in classJsonParser
- Throws:
java.io.IOException
JsonParseException
-
close
public void close() throws java.io.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 featureJsonParser.Feature.AUTO_CLOSE_SOURCE
is enabled. Whether parser owns the input source depends on factory method that was used to construct instance (so checkJsonFactory
for details, but the general idea is that if caller passes in closable resource (such asInputStream
orReader
) parser does NOT own the source; but if it passes a reference (such asFile
orURL
and creates stream or reader it does own them.- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
in classJsonParserBase
- Throws:
java.io.IOException
-
parseNumberText
protected final JsonToken parseNumberText(int ch) throws java.io.IOException, JsonParseException
Initial parsing method for number values. It needs to be able to parse enough input to be able to determine whether the value is to be considered a simple integer value, or a more generic decimal value: latter of which needs to be expressed as a floating point number. The basic rule is that if the number has no fractional or exponential part, it is an integer; otherwise a floating point number.Because much of input has to be processed in any case, no partial parsing is done: all input text will be stored for further processing. However, actual numeric value conversion will be deferred, since it is usually the most complicated and costliest part of processing.
- Throws:
java.io.IOException
JsonParseException
-
_handleInvalidNumberStart
protected JsonToken _handleInvalidNumberStart(int ch, boolean negative) throws java.io.IOException, JsonParseException
Method called if expected numeric value (due to leading sign) does not look like a number- Throws:
java.io.IOException
JsonParseException
-
_parseFieldName
protected final java.lang.String _parseFieldName(int i) throws java.io.IOException, JsonParseException
- Throws:
java.io.IOException
JsonParseException
-
_handleUnusualFieldName
protected final java.lang.String _handleUnusualFieldName(int i) throws java.io.IOException, JsonParseException
Method called when we see non-white space character other than double quote, when expecting a field name. In standard mode will just throw an expection; but in non-standard modes may be able to parse name.- Throws:
java.io.IOException
JsonParseException
- Since:
- 1.2
-
_parseApostropheFieldName
protected final java.lang.String _parseApostropheFieldName() throws java.io.IOException, JsonParseException
- Throws:
java.io.IOException
JsonParseException
-
_handleUnexpectedValue
protected final JsonToken _handleUnexpectedValue(int i) throws java.io.IOException, JsonParseException
Method for handling cases where first non-space character of an expected value token is not legal for standard JSON content.- Throws:
java.io.IOException
JsonParseException
- Since:
- 1.3
-
_handleApostropheValue
protected final JsonToken _handleApostropheValue() throws java.io.IOException, JsonParseException
- Throws:
java.io.IOException
JsonParseException
- Since:
- 1.8
-
_finishString
protected void _finishString() throws java.io.IOException, JsonParseException
- Specified by:
_finishString
in classJsonParserBase
- Throws:
java.io.IOException
JsonParseException
-
_finishString2
protected void _finishString2() throws java.io.IOException, JsonParseException
- Throws:
java.io.IOException
JsonParseException
-
_skipString
protected void _skipString() throws java.io.IOException, JsonParseException
Method called to skim through rest of unparsed String value, if it is not needed. This can be done bit faster if contents need not be stored for future access.- Throws:
java.io.IOException
JsonParseException
-
_skipCR
protected final void _skipCR() throws java.io.IOException
We actually need to check the character value here (to see if we have \n following \r).- Throws:
java.io.IOException
-
_skipLF
protected final void _skipLF() throws java.io.IOException
- Throws:
java.io.IOException
-
_decodeEscaped
protected final char _decodeEscaped() throws java.io.IOException, JsonParseException
Description copied from class:JsonParserBase
Method that sub-classes must implement to support escaped sequences in base64-encoded sections. Sub-classes that do not need base64 support can leave this as is- Overrides:
_decodeEscaped
in classJsonParserBase
- Throws:
java.io.IOException
JsonParseException
-
_matchToken
protected final void _matchToken(java.lang.String matchStr, int i) throws java.io.IOException, JsonParseException
Helper method for checking whether input matches expected token- Throws:
java.io.IOException
JsonParseException
- Since:
- 1.8
-
_decodeBase64
protected byte[] _decodeBase64(Base64Variant b64variant) throws java.io.IOException, JsonParseException
Efficient handling for incremental parsing of base64-encoded textual content.- Throws:
java.io.IOException
JsonParseException
-
_reportInvalidToken
protected void _reportInvalidToken(java.lang.String matchedPart, java.lang.String msg) throws java.io.IOException, JsonParseException
- Throws:
java.io.IOException
JsonParseException
-
-