public final class StreamBootstrapper extends InputBootstrapper
Encoding used for an entity (including main document entity) is determined using algorithms suggested in XML 1.0#3 spec, appendix F
Modifier and Type | Field and Description |
---|---|
(package private) boolean |
mBigEndian |
private byte[] |
mByteBuffer |
(package private) boolean |
mByteSizeFound |
(package private) int |
mBytesPerChar
For most encodings, number of physical characters needed for
decoding xml declaration characters (which for variable length
encodings like UTF-8 will be 1).
|
(package private) boolean |
mEBCDIC
Special case for 1-byte encodings: EBCDIC is problematic
as it's not 7-bit ascii compatible.
|
(package private) boolean |
mHadBOM |
(package private) java.io.InputStream |
mIn
Underlying InputStream to use for reading content.
|
(package private) static int |
MIN_BUF_SIZE
Let's size buffer at least big enough to contain the longest possible
prefix of a document needed to positively identify it starts with
the XML declaration.
|
(package private) java.lang.String |
mInputEncoding |
private int |
mInputEnd |
private int |
mInputPtr |
private boolean |
mRecycleBuffer
Whether byte buffer is recyclable or not
|
(package private) int[] |
mSingleByteTranslation
For single-byte non-ascii-compatible encodings (ok ok, really
just EBCDIC), we'll have to use a lookup table.
|
BYTE_CR, BYTE_LF, BYTE_NULL, CHAR_CR, CHAR_LF, CHAR_NEL, CHAR_NULL, CHAR_SPACE, ERR_XMLDECL_END_MARKER, ERR_XMLDECL_EXP_ATTRVAL, ERR_XMLDECL_EXP_EQ, ERR_XMLDECL_EXP_SPACE, ERR_XMLDECL_KW_ENCODING, ERR_XMLDECL_KW_STANDALONE, ERR_XMLDECL_KW_VERSION, mDeclaredXmlVersion, mFoundEncoding, mInputProcessed, mInputRow, mInputRowStart, mKeyword, mPublicId, mStandalone, mSystemId, mXml11Handling
Modifier | Constructor and Description |
---|---|
private |
StreamBootstrapper(java.lang.String pubId,
SystemId sysId,
byte[] data,
int start,
int end) |
private |
StreamBootstrapper(java.lang.String pubId,
SystemId sysId,
java.io.InputStream in) |
Modifier and Type | Method and Description |
---|---|
java.io.Reader |
bootstrapInput(ReaderConfig cfg,
boolean mainDoc,
int xmlVersion) |
protected int |
checkKeyword(java.lang.String exp) |
protected int |
checkMbKeyword(java.lang.String expected) |
protected int |
checkSbKeyword(java.lang.String expected) |
protected int |
checkTranslatedKeyword(java.lang.String expected) |
protected boolean |
ensureLoaded(int minimum) |
int |
getInputColumn() |
java.lang.String |
getInputEncoding()
Since this class only gets used when encoding is not explicitly
passed, need use the encoding that was auto-detected...
|
int |
getInputTotal() |
static StreamBootstrapper |
getInstance(java.lang.String pubId,
SystemId sysId,
byte[] data,
int start,
int end)
Factory method used when the underlying data provider is a pre-allocated
block source, and no stream is used.
|
static StreamBootstrapper |
getInstance(java.lang.String pubId,
SystemId sysId,
java.io.InputStream in)
Factory method used when the underlying data provider is an
actual stream.
|
protected javax.xml.stream.Location |
getLocation() |
protected int |
getNext() |
protected int |
getNextAfterWs(boolean reqWs) |
protected boolean |
hasXmlDecl() |
protected void |
loadMore() |
protected byte |
nextByte() |
protected int |
nextMultiByte() |
protected int |
nextTranslated() |
protected void |
pushback() |
protected int |
readQuotedValue(char[] kw,
int quoteChar) |
private void |
reportWeirdUCS4(java.lang.String type) |
protected void |
resolveStreamEncoding()
Method called to try to figure out physical encoding the underlying
input stream uses.
|
protected void |
skipMbLF(int lf) |
protected int |
skipMbWs() |
protected void |
skipSbLF(byte lfByte) |
protected int |
skipSbWs() |
protected void |
skipTranslatedLF(int lf) |
protected int |
skipTranslatedWs() |
private void |
verifyEncoding(java.lang.String id,
int bpc) |
private void |
verifyEncoding(java.lang.String id,
int bpc,
boolean bigEndian) |
protected java.lang.String |
verifyXmlEncoding(java.lang.String enc) |
declaredXml11, getDeclaredEncoding, getDeclaredVersion, getInputRow, getPublicId, getStandalone, getSystemId, initFrom, readXmlDecl, reportNull, reportUnexpectedChar, reportXmlProblem
static final int MIN_BUF_SIZE
final java.io.InputStream mIn
private byte[] mByteBuffer
private final boolean mRecycleBuffer
private int mInputPtr
private int mInputEnd
boolean mBigEndian
boolean mHadBOM
boolean mByteSizeFound
int mBytesPerChar
boolean mEBCDIC
java.lang.String mInputEncoding
int[] mSingleByteTranslation
private StreamBootstrapper(java.lang.String pubId, SystemId sysId, java.io.InputStream in)
private StreamBootstrapper(java.lang.String pubId, SystemId sysId, byte[] data, int start, int end)
start
- Pointer to the first valid byte in the bufferend
- Pointer to the offset after last valid byte in the bufferpublic static StreamBootstrapper getInstance(java.lang.String pubId, SystemId sysId, java.io.InputStream in)
public static StreamBootstrapper getInstance(java.lang.String pubId, SystemId sysId, byte[] data, int start, int end)
public java.io.Reader bootstrapInput(ReaderConfig cfg, boolean mainDoc, int xmlVersion) throws java.io.IOException, javax.xml.stream.XMLStreamException
bootstrapInput
in class InputBootstrapper
xmlVersion
- Optional xml version identifier of the main parsed
document (if not bootstrapping the main document).
Currently only relevant for checking that XML 1.0 document does not
include XML 1.1 external parsed entities.
If null, no checks will be done; when bootstrapping parsing of the
main document, null should be passed for this argument.java.io.IOException
javax.xml.stream.XMLStreamException
public java.lang.String getInputEncoding()
getInputEncoding
in class InputBootstrapper
public int getInputTotal()
getInputTotal
in class InputBootstrapper
public int getInputColumn()
getInputColumn
in class InputBootstrapper
protected void resolveStreamEncoding() throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected java.lang.String verifyXmlEncoding(java.lang.String enc) throws WstxException
WstxException
protected boolean ensureLoaded(int minimum) throws java.io.IOException
java.io.IOException
protected void loadMore() throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected void pushback()
pushback
in class InputBootstrapper
protected int getNext() throws java.io.IOException, WstxException
getNext
in class InputBootstrapper
java.io.IOException
WstxException
protected int getNextAfterWs(boolean reqWs) throws java.io.IOException, WstxException
getNextAfterWs
in class InputBootstrapper
java.io.IOException
WstxException
protected int checkKeyword(java.lang.String exp) throws java.io.IOException, WstxException
checkKeyword
in class InputBootstrapper
java.io.IOException
WstxException
protected int readQuotedValue(char[] kw, int quoteChar) throws java.io.IOException, WstxException
readQuotedValue
in class InputBootstrapper
java.io.IOException
WstxException
protected boolean hasXmlDecl() throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected javax.xml.stream.Location getLocation()
getLocation
in class InputBootstrapper
protected byte nextByte() throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected int skipSbWs() throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected void skipSbLF(byte lfByte) throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected int checkSbKeyword(java.lang.String expected) throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected int nextMultiByte() throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected int nextTranslated() throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected int skipMbWs() throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected int skipTranslatedWs() throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected void skipMbLF(int lf) throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected void skipTranslatedLF(int lf) throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected int checkMbKeyword(java.lang.String expected) throws java.io.IOException, WstxException
java.io.IOException
WstxException
protected int checkTranslatedKeyword(java.lang.String expected) throws java.io.IOException, WstxException
java.io.IOException
WstxException
private void verifyEncoding(java.lang.String id, int bpc) throws WstxException
WstxException
private void verifyEncoding(java.lang.String id, int bpc, boolean bigEndian) throws WstxException
WstxException
private void reportWeirdUCS4(java.lang.String type) throws java.io.IOException
java.io.IOException