Class NonBlockingJsonParser
java.lang.Object
edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.JsonParser
edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.base.ParserMinimalBase
edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.base.ParserBase
edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.json.async.NonBlockingJsonParserBase
edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.json.async.NonBlockingJsonParser
- All Implemented Interfaces:
ByteArrayFeeder
,NonBlockingInputFeeder
,Versioned
,Closeable
,AutoCloseable
Non-blocking parser implementation for JSON content.
NOTE: only supports parsing of UTF-8 encoded content (and 7-bit US-ASCII since it is strict subset of UTF-8): other encodings are not supported.
-
Nested Class Summary
Nested classes/interfaces inherited from class edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.JsonParser
JsonParser.Feature, JsonParser.NumberType
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final int[]
protected byte[]
This buffer is actually provided viaNonBlockingInputFeeder
protected int
In addition to current buffer pointer, and end pointer, we will also need to know number of bytes originally contained.Fields inherited from class edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.json.async.NonBlockingJsonParserBase
_currBufferStart, _currInputRowAlt, _endOfInput, _majorState, _majorStateAfterValue, _minorState, _minorStateAfterSplit, _nonStdTokenType, _pending32, _pendingBytes, _quad1, _quadBuffer, _quadLength, _quoted32, _quotedDigits, _symbols, MAJOR_ARRAY_ELEMENT_FIRST, MAJOR_ARRAY_ELEMENT_NEXT, MAJOR_CLOSED, MAJOR_INITIAL, MAJOR_OBJECT_FIELD_FIRST, MAJOR_OBJECT_FIELD_NEXT, MAJOR_OBJECT_VALUE, MAJOR_ROOT, MINOR_COMMENT_C, MINOR_COMMENT_CLOSING_ASTERISK, MINOR_COMMENT_CPP, MINOR_COMMENT_LEADING_SLASH, MINOR_COMMENT_YAML, MINOR_FIELD_APOS_NAME, MINOR_FIELD_LEADING_COMMA, MINOR_FIELD_LEADING_WS, MINOR_FIELD_NAME, MINOR_FIELD_NAME_ESCAPE, MINOR_FIELD_UNQUOTED_NAME, MINOR_NUMBER_EXPONENT_DIGITS, MINOR_NUMBER_EXPONENT_MARKER, MINOR_NUMBER_FRACTION_DIGITS, MINOR_NUMBER_INTEGER_DIGITS, MINOR_NUMBER_MINUS, MINOR_NUMBER_MINUSZERO, MINOR_NUMBER_ZERO, MINOR_ROOT_BOM, MINOR_ROOT_GOT_SEPARATOR, MINOR_ROOT_NEED_SEPARATOR, MINOR_VALUE_APOS_STRING, MINOR_VALUE_EXPECTING_COLON, MINOR_VALUE_EXPECTING_COMMA, MINOR_VALUE_LEADING_WS, MINOR_VALUE_STRING, MINOR_VALUE_STRING_ESCAPE, MINOR_VALUE_STRING_UTF8_2, MINOR_VALUE_STRING_UTF8_3, MINOR_VALUE_STRING_UTF8_4, MINOR_VALUE_TOKEN_ERROR, MINOR_VALUE_TOKEN_FALSE, MINOR_VALUE_TOKEN_NON_STD, MINOR_VALUE_TOKEN_NULL, MINOR_VALUE_TOKEN_TRUE, MINOR_VALUE_WS_AFTER_COMMA, NON_STD_TOKEN_INFINITY, NON_STD_TOKEN_MINUS_INFINITY, NON_STD_TOKEN_NAN, NON_STD_TOKEN_PLUS_INFINITY, NON_STD_TOKEN_VALUES, NON_STD_TOKENS
Fields inherited from class edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.base.ParserBase
_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, JSON_READ_CAPABILITIES
Fields inherited from class edu.internet2.middleware.grouperClientExt.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 edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.JsonParser
_features, _requestPayload, DEFAULT_READ_CAPABILITIES
-
Constructor Summary
ConstructorsConstructorDescriptionNonBlockingJsonParser
(IOContext ctxt, int parserFeatures, ByteQuadsCanonicalizer sym) -
Method Summary
Modifier and TypeMethodDescriptionprotected char
Method that sub-classes must implement to support escaped sequences in base64-encoded sections.protected JsonToken
protected JsonToken
protected final JsonToken
protected JsonToken
_finishFloatExponent
(boolean checkSign, int ch) protected JsonToken
protected JsonToken
_finishKeywordToken
(String expToken, int matched, JsonToken result) protected JsonToken
_finishKeywordTokenWithEOF
(String expToken, int matched, JsonToken result) protected JsonToken
_finishNonStdToken
(int type, int matched) protected JsonToken
_finishNonStdTokenWithEOF
(int type, int matched) protected JsonToken
_finishNumberIntegralPart
(char[] outBuf, int outPtr) protected JsonToken
protected JsonToken
protected JsonToken
_finishNumberMinus
(int ch) protected final JsonToken
Method called when decoding of a token has been started, but not yet completed due to missing input; method is to continue decoding due to at least one more byte being made available to decode.protected final JsonToken
Method similar to_finishToken()
, but called when no more input is available, and end-of-input has been detected.protected JsonToken
_reportErrorToken
(String actualToken) protected JsonToken
protected JsonToken
protected JsonToken
_startFloat
(char[] outBuf, int outPtr, int ch) protected JsonToken
protected JsonToken
protected JsonToken
protected JsonToken
protected JsonToken
_startPositiveNumber
(int ch) protected JsonToken
protected JsonToken
protected JsonToken
_startUnexpectedValue
(boolean leadingComma, int ch) void
Method that should be called after last chunk of data to parse has been fed (withfeedInput
in sub-class); can be called regardless of whatNonBlockingInputFeeder.needMoreInput()
returns.void
feedInput
(byte[] buf, int start, int end) Method that can be called to feed more data, if (and only if)NonBlockingInputFeeder.needMoreInput()
returns true.Method that will either return a feeder instance (if parser uses non-blocking, aka asynchronous access); ornull
for parsers that use blocking I/O.final boolean
Method called to check whether it is ok to feed more data: parser returns true if it has no more content to parse (and it is ok to feed more); otherwise false (and no data should yet be fed).Main iteration method, which will advance stream enough to determine type of the next token, if any.int
Method that can be called to push back any content that has been read but not consumed by the parser.Methods inherited from class edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.json.async.NonBlockingJsonParserBase
_addName, _closeArrayScope, _closeInput, _closeObjectScope, _eofAsNextToken, _fieldComplete, _findName, _findName, _findName, _getText2, _nonStdToken, _padLastQuad, _releaseBuffers, _reportInvalidChar, _reportInvalidInitial, _reportInvalidOther, _reportInvalidOther, _startArrayScope, _startObjectScope, _updateTokenLocation, _valueComplete, _valueCompleteInt, _valueNonStdNumberComplete, canParseAsync, getBinaryValue, getCodec, getCurrentLocation, getEmbeddedObject, getInputSource, getReadCapabilities, getText, getText, getTextCharacters, getTextLength, getTextOffset, getTokenLocation, getValueAsString, getValueAsString, hasTextCharacters, readBinaryValue, setCodec, symbolTableForTests
Methods inherited from class edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.base.ParserBase
_checkStdFeatureChanges, _contentReference, _decodeBase64Escape, _decodeBase64Escape, _eofAsNextChar, _finishString, _getByteArrayBuilder, _getSourceReference, _handleBase64MissingPadding, _handleEOF, _handleUnrecognizedCharacterEscape, _parseIntValue, _parseNumericValue, _reportMismatchedEndMarker, _reportTooLongIntegral, _throwUnquotedSpace, _validJsonTokenList, _validJsonValueList, close, convertNumberToBigDecimal, convertNumberToBigInteger, convertNumberToDouble, convertNumberToInt, convertNumberToLong, disable, enable, getBigIntegerValue, getCurrentName, getCurrentValue, getDecimalValue, getDoubleValue, getFloatValue, getIntValue, getLongValue, getNumberType, getNumberValue, getNumberValueExact, getParsingContext, getTokenCharacterOffset, getTokenColumnNr, getTokenLineNr, growArrayBy, isClosed, isNaN, loadMore, loadMoreGuaranteed, overrideCurrentName, overrideStdFeatures, reportInvalidBase64Char, reportInvalidBase64Char, reset, resetAsNaN, resetFloat, resetInt, setCurrentValue, setFeatureMask, version
Methods inherited from class edu.internet2.middleware.grouperClientExt.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, _throwInternal, _throwInvalidSpace, _wrapError, clearCurrentToken, currentToken, currentTokenId, getCurrentToken, getCurrentTokenId, getLastClearedToken, getValueAsBoolean, getValueAsDouble, getValueAsInt, getValueAsInt, getValueAsLong, getValueAsLong, hasCurrentToken, hasToken, hasTokenId, isExpectedNumberIntToken, isExpectedStartArrayToken, isExpectedStartObjectToken, nextValue, reportInvalidNumber, reportOverflowInt, reportOverflowInt, reportOverflowInt, reportOverflowLong, reportOverflowLong, reportOverflowLong, reportUnexpectedNumberChar, skipChildren
Methods inherited from class edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.core.JsonParser
_codec, _constructError, _constructReadException, _constructReadException, _constructReadException, _constructReadException, _constructReadException, _reportUnsupportedOperation, assignCurrentValue, canReadObjectId, canReadTypeId, canUseSchema, configure, currentLocation, currentName, currentTokenLocation, currentValue, finishToken, getBinaryValue, getBooleanValue, getByteValue, getFeatureMask, getFormatFeatures, getObjectId, getSchema, getShortValue, getTypeId, getValueAsBoolean, getValueAsDouble, isEnabled, isEnabled, nextBooleanValue, nextFieldName, nextFieldName, nextIntValue, nextLongValue, nextTextValue, overrideFormatFeatures, readBinaryValue, readValueAs, readValueAs, readValueAsTree, readValuesAs, readValuesAs, releaseBuffered, requiresCustomCodec, setRequestPayloadOnError, setRequestPayloadOnError, setRequestPayloadOnError, setSchema
-
Field Details
-
_icLatin1
protected static final int[] _icLatin1 -
_inputBuffer
protected byte[] _inputBufferThis buffer is actually provided viaNonBlockingInputFeeder
-
_origBufferLen
protected int _origBufferLenIn addition to current buffer pointer, and end pointer, we will also need to know number of bytes originally contained. This is needed to correctly update location information when the block has been completed.
-
-
Constructor Details
-
NonBlockingJsonParser
-
-
Method Details
-
getNonBlockingInputFeeder
Description copied from class:JsonParser
Method that will either return a feeder instance (if parser uses non-blocking, aka asynchronous access); ornull
for parsers that use blocking I/O.- Overrides:
getNonBlockingInputFeeder
in classJsonParser
- Returns:
- Input feeder to use with non-blocking (async) parsing
-
needMoreInput
public final boolean needMoreInput()Description copied from interface:NonBlockingInputFeeder
Method called to check whether it is ok to feed more data: parser returns true if it has no more content to parse (and it is ok to feed more); otherwise false (and no data should yet be fed).- Specified by:
needMoreInput
in interfaceNonBlockingInputFeeder
- Returns:
True
if more input is needed (and can be fed);false
if there is still some input to decode
-
feedInput
Description copied from interface:ByteArrayFeeder
Method that can be called to feed more data, if (and only if)NonBlockingInputFeeder.needMoreInput()
returns true.- Specified by:
feedInput
in interfaceByteArrayFeeder
- Parameters:
buf
- Byte array that contains data to feed: caller must ensure data remains stable until it is fully processed (which is true whenNonBlockingInputFeeder.needMoreInput()
returns true)start
- Offset within array where input data to process startsend
- Offset after last byte contained in the input array- Throws:
IOException
- if the state is such that this method should not be called (has not yet consumed existing input data, or has been marked as closed)
-
endOfInput
public void endOfInput()Description copied from interface:NonBlockingInputFeeder
Method that should be called after last chunk of data to parse has been fed (withfeedInput
in sub-class); can be called regardless of whatNonBlockingInputFeeder.needMoreInput()
returns. After calling this method, no more data can be fed; and parser assumes no more data will be available.- Specified by:
endOfInput
in interfaceNonBlockingInputFeeder
-
releaseBuffered
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 stream if possible; if underlying input is byte-based it can released, if not (char-based) it can not.- Specified by:
releaseBuffered
in classNonBlockingJsonParserBase
- Parameters:
out
- OutputStream to which buffered, undecoded content is written to- Returns:
- -1 if the underlying content source is not byte based
(that is, input can not be sent to
OutputStream
; otherwise number of bytes released (0 if there was nothing to release) - Throws:
IOException
- if write to stream threw exception
-
_decodeEscaped
Description copied from class:ParserBase
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 classParserBase
- Returns:
- Character decoded, if any
- Throws:
IOException
- If escape decoding fails
-
nextToken
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 classParserMinimalBase
- Returns:
- Next token from the stream, if any found, or null to indicate end-of-input
- Throws:
IOException
- for low-level read issues, orJsonParseException
for decoding problems
-
_finishToken
Method called when decoding of a token has been started, but not yet completed due to missing input; method is to continue decoding due to at least one more byte being made available to decode.- Returns:
- Token decoded, if complete;
JsonToken.NOT_AVAILABLE
if not - Throws:
IOException
- (generallyJsonParseException
) for decoding problems
-
_finishTokenWithEOF
Method similar to_finishToken()
, but called when no more input is available, and end-of-input has been detected. This is usually problem case, but not always: root-level values may be properly terminated by this, and similarly trailing white-space may have been skipped.- Returns:
- Token decoded, if complete;
JsonToken.NOT_AVAILABLE
if not - Throws:
IOException
- (generallyJsonParseException
) for decoding problems
-
_startUnexpectedValue
- Throws:
IOException
-
_startFalseToken
- Throws:
IOException
-
_startTrueToken
- Throws:
IOException
-
_startNullToken
- Throws:
IOException
-
_finishKeywordToken
protected JsonToken _finishKeywordToken(String expToken, int matched, JsonToken result) throws IOException - Throws:
IOException
-
_finishKeywordTokenWithEOF
protected JsonToken _finishKeywordTokenWithEOF(String expToken, int matched, JsonToken result) throws IOException - Throws:
IOException
-
_finishNonStdToken
- Throws:
IOException
-
_finishNonStdTokenWithEOF
- Throws:
IOException
-
_finishErrorToken
- Throws:
IOException
-
_finishErrorTokenWithEOF
- Throws:
IOException
-
_reportErrorToken
- Throws:
IOException
-
_startFloatThatStartsWithPeriod
- Throws:
IOException
-
_startPositiveNumber
- Throws:
IOException
-
_startNegativeNumber
- Throws:
IOException
-
_startNumberLeadingZero
- Throws:
IOException
-
_finishNumberMinus
- Throws:
IOException
-
_finishNumberLeadingZeroes
- Throws:
IOException
-
_finishNumberLeadingNegZeroes
- Throws:
IOException
-
_finishNumberIntegralPart
- Throws:
IOException
-
_startFloat
- Throws:
IOException
-
_finishFloatFraction
- Throws:
IOException
-
_finishFloatExponent
- Throws:
IOException
-
_finishFieldWithEscape
- Throws:
IOException
-
_startString
- Throws:
IOException
-
_startAposString
- Throws:
IOException
-