/** * Overridable factory method that actually instantiates parser * using given <code>char[]</code> object for accessing content. * * @since 2.4 */ protected JsonParser _createParser(char[] data, int offset, int len, IOContext ctxt, boolean recyclable) throws IOException { return new ReaderBasedJsonParser(ctxt, _parserFeatures, null, _objectCodec, _rootCharSymbols.makeChild(_factoryFeatures), data, offset, offset+len, recyclable); }
protected boolean _loadMore() throws IOException { final int bufSize = _inputEnd; _currInputProcessed += bufSize; _currInputRowStart -= bufSize; // 26-Nov-2015, tatu: Since name-offset requires it too, must offset // this increase to avoid "moving" name-offset, resulting most likely // in negative value, which is fine as combine value remains unchanged. _nameStartOffset -= bufSize; if (_reader != null) { int count = _reader.read(_inputBuffer, 0, _inputBuffer.length); if (count > 0) { _inputPtr = 0; _inputEnd = count; return true; } // End of input _closeInput(); // Should never return 0, so let's fail if (count == 0) { throw new IOException("Reader returned 0 characters when trying to read "+_inputEnd); } } return false; }
@Override public byte[] getBinaryValue(Base64Variant b64variant) throws IOException { if ((_currToken == JsonToken.VALUE_EMBEDDED_OBJECT) && (_binaryValue != null)) { return _binaryValue; } if (_currToken != JsonToken.VALUE_STRING) { _reportError("Current token ("+_currToken+") not VALUE_STRING or VALUE_EMBEDDED_OBJECT, can not access as binary"); } // To ensure that we won't see inconsistent data, better clear up state if (_tokenIncomplete) { try { _binaryValue = _decodeBase64(b64variant); } catch (IllegalArgumentException iae) { throw _constructError("Failed to decode VALUE_STRING as base64 ("+b64variant+"): "+iae.getMessage()); } /* let's clear incomplete only now; allows for accessing other * textual content in error cases */ _tokenIncomplete = false; } else { // may actually require conversion... if (_binaryValue == null) { @SuppressWarnings("resource") ByteArrayBuilder builder = _getByteArrayBuilder(); _decodeBase64(getText(), builder, b64variant); _binaryValue = builder.toByteArray(); } } return _binaryValue; }
if (inPtr >= inLen) { _inputPtr = inPtr; if (!_loadMore()) { _reportInvalidEOF(": was expecting closing quote for a string value", JsonToken.VALUE_STRING); /*c = */ _decodeEscaped(); inPtr = _inputPtr; inLen = _inputEnd; _throwUnquotedSpace(i, "string value");
private final int _skipAfterComma2() throws IOException { while (_inputPtr < _inputEnd || _loadMore()) { int i = (int) _inputBuffer[_inputPtr++]; if (i > INT_SPACE) { if (i == INT_SLASH) { _skipComment(); continue; } if (i == INT_HASH) { if (_skipYAMLComment()) { continue; } } return i; } if (i < INT_SPACE) { if (i == INT_LF) { ++_currInputRow; _currInputRowStart = _inputPtr; } else if (i == INT_CR) { _skipCR(); } else if (i != INT_TAB) { _throwInvalidSpace(i); } } } throw _constructError("Unexpected end-of-input within/between "+_parsingContext.typeDesc()+" entries"); }
do { if (_inputPtr >= _inputEnd) { _loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 0); if (bits < 0) { // white space to skip continue; _loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 1); _loadMoreGuaranteed(); _handleBase64MissingPadding(b64variant); bits = _decodeBase64Escape(b64variant, ch, 2); _loadMoreGuaranteed(); if (_decodeBase64Escape(b64variant, ch, 3) != Base64Variant.BASE64_VALUE_PADDING) { throw reportInvalidBase64Char(b64variant, ch, 3, "expected padding character '"+b64variant.getPaddingChar()+"'"); _loadMoreGuaranteed(); _handleBase64MissingPadding(b64variant); bits = _decodeBase64Escape(b64variant, ch, 3);
if (!loadMore()) { _reportInvalidEOF(": was expecting closing quote for a string value"); c = _decodeEscaped(); } else if (i < INT_SPACE) { _throwUnquotedSpace(i, "string value");
private final int _skipAfterComma2() throws IOException { while (_inputPtr < _inputEnd || loadMore()) { int i = (int) _inputBuffer[_inputPtr++]; if (i > INT_SPACE) { if (i == INT_SLASH) { _skipComment(); continue; } if (i == INT_HASH) { if (_skipYAMLComment()) { continue; } } return i; } if (i < INT_SPACE) { if (i == INT_LF) { ++_currInputRow; _currInputRowStart = _inputPtr; } else if (i == INT_CR) { _skipCR(); } else if (i != INT_TAB) { _throwInvalidSpace(i); } } } throw _constructError("Unexpected end-of-input within/between "+_parsingContext.getTypeDesc()+" entries"); }
throws IOException, JsonParseException ByteArrayBuilder builder = _getByteArrayBuilder(); do { if (_inputPtr >= _inputEnd) { loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 0); if (bits < 0) { // white space to skip continue; loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 1); loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 2); loadMoreGuaranteed(); throw reportInvalidBase64Char(b64variant, ch, 3, "expected padding character '"+b64variant.getPaddingChar()+"'"); loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 3);
private final int _skipWS() throws IOException, JsonParseException { while (_inputPtr < _inputEnd || loadMore()) { int i = (int) _inputBuffer[_inputPtr++]; if (i > INT_SPACE) { if (i != INT_SLASH) { return i; } _skipComment(); } else if (i != INT_SPACE) { if (i == INT_LF) { _skipLF(); } else if (i == INT_CR) { _skipCR(); } else if (i != INT_TAB) { _throwInvalidSpace(i); } } } throw _constructError("Unexpected end-of-input within/between "+_parsingContext.getTypeDesc()+" entries"); }
/** * Method for accessing textual representation of the current event; * if no current event (before first call to {@link #nextToken}, or * after encountering end-of-input), returns null. * Method can be called for any event. */ @Override public final String getText() throws IOException { JsonToken t = _currToken; if (t == JsonToken.VALUE_STRING) { if (_tokenIncomplete) { _tokenIncomplete = false; _finishString(); // only strings can be incomplete } return _textBuffer.contentsAsString(); } return _getText2(t); }
@Override public final String nextTextValue() throws IOException { if (_currToken == JsonToken.FIELD_NAME) { // mostly copied from '_nextAfterName' _nameCopied = false; JsonToken t = _nextToken; _nextToken = null; _currToken = t; if (t == JsonToken.VALUE_STRING) { if (_tokenIncomplete) { _tokenIncomplete = false; _finishString(); } return _textBuffer.contentsAsString(); } if (t == JsonToken.START_ARRAY) { _parsingContext = _parsingContext.createChildArrayContext(_tokenInputRow, _tokenInputCol); } else if (t == JsonToken.START_OBJECT) { _parsingContext = _parsingContext.createChildObjectContext(_tokenInputRow, _tokenInputCol); } return null; } // !!! TODO: optimize this case as well return (nextToken() == JsonToken.VALUE_STRING) ? getText() : null; }
do { if (_inputPtr >= _inputEnd) { loadMoreGuaranteed(); break; bits = _decodeBase64Escape(b64variant, ch, 0); if (bits < 0) { // white space to skip continue; loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 1); loadMoreGuaranteed(); break; bits = _decodeBase64Escape(b64variant, ch, 2); loadMoreGuaranteed(); throw reportInvalidBase64Char(b64variant, ch, 3, "expected padding character '"+b64variant.getPaddingChar()+"'"); loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 3);
@Override public void finishToken() throws IOException { if (_tokenIncomplete) { _tokenIncomplete = false; _finishString(); // only strings can be incomplete } }
do { if (_inputPtr >= _inputEnd) { _loadMoreGuaranteed(); break; bits = _decodeBase64Escape(b64variant, ch, 0); if (bits < 0) { // white space to skip continue; _loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 1); _loadMoreGuaranteed(); break; bits = _decodeBase64Escape(b64variant, ch, 2); _loadMoreGuaranteed(); throw reportInvalidBase64Char(b64variant, ch, 3, "expected padding character '"+b64variant.getPaddingChar()+"'"); _loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 3);
@Override public final String getValueAsString(String defValue) throws IOException { if (_currToken == JsonToken.VALUE_STRING) { if (_tokenIncomplete) { _tokenIncomplete = false; _finishString(); // only strings can be incomplete } return _textBuffer.contentsAsString(); } if (_currToken == JsonToken.FIELD_NAME) { return getCurrentName(); } return super.getValueAsString(defValue); }
@Override public final String getValueAsString(String defValue) throws IOException { if (_currToken == JsonToken.VALUE_STRING) { if (_tokenIncomplete) { _tokenIncomplete = false; _finishString(); // only strings can be incomplete } return _textBuffer.contentsAsString(); } if (_currToken == JsonToken.FIELD_NAME) { return currentName(); } return super.getValueAsString(defValue); }
if (inPtr >= inLen) { _inputPtr = inPtr; if (!_loadMore()) { _reportInvalidEOF(": was expecting closing quote for a string value", JsonToken.VALUE_STRING); /*c = */ _decodeEscaped(); inPtr = _inputPtr; inLen = _inputEnd; _throwUnquotedSpace(i, "string value");
ByteArrayBuilder builder = _getByteArrayBuilder(); do { if (_inputPtr >= _inputEnd) { _loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 0); if (bits < 0) { // white space to skip continue; _loadMoreGuaranteed(); bits = _decodeBase64Escape(b64variant, ch, 1); _loadMoreGuaranteed(); _handleBase64MissingPadding(b64variant); bits = _decodeBase64Escape(b64variant, ch, 2); _loadMoreGuaranteed(); if (_decodeBase64Escape(b64variant, ch, 3) != Base64Variant.BASE64_VALUE_PADDING) { throw reportInvalidBase64Char(b64variant, ch, 3, "expected padding character '"+b64variant.getPaddingChar()+"'"); _loadMoreGuaranteed(); _handleBase64MissingPadding(b64variant);