Class InputBootstrapper

  • Direct Known Subclasses:
    ReaderBootstrapper, StreamBootstrapper

    public abstract class InputBootstrapper
    extends java.lang.Object
    Abstract base class that defines common API used with both stream and reader-based input sources. Class is responsible for opening the physical input source, figure out encoding (if necessary; only for streams), and then handle (optional) XML declaration.
    • Field Detail

      • ERR_XMLDECL_KW_VERSION

        protected static final java.lang.String ERR_XMLDECL_KW_VERSION
        See Also:
        Constant Field Values
      • ERR_XMLDECL_KW_ENCODING

        protected static final java.lang.String ERR_XMLDECL_KW_ENCODING
        See Also:
        Constant Field Values
      • ERR_XMLDECL_KW_STANDALONE

        protected static final java.lang.String ERR_XMLDECL_KW_STANDALONE
        See Also:
        Constant Field Values
      • ERR_XMLDECL_END_MARKER

        protected static final java.lang.String ERR_XMLDECL_END_MARKER
        See Also:
        Constant Field Values
      • ERR_XMLDECL_EXP_SPACE

        protected static final java.lang.String ERR_XMLDECL_EXP_SPACE
        See Also:
        Constant Field Values
      • ERR_XMLDECL_EXP_EQ

        protected static final java.lang.String ERR_XMLDECL_EXP_EQ
        See Also:
        Constant Field Values
      • ERR_XMLDECL_EXP_ATTRVAL

        protected static final java.lang.String ERR_XMLDECL_EXP_ATTRVAL
        See Also:
        Constant Field Values
      • mPublicId

        protected final java.lang.String mPublicId
      • mSystemId

        protected final SystemId mSystemId
      • mInputProcessed

        protected int mInputProcessed
        Current number of characters that were processed in previous blocks, before contents of current input buffer.
      • mInputRow

        protected int mInputRow
        Current row location of current point in input buffer, starting from 1
      • mInputRowStart

        protected int mInputRowStart
        Current index of the first character of the current row in input buffer. Needed to calculate column position, if necessary; benefit of not having column itself is that this only has to be updated once per line.
      • mDeclaredXmlVersion

        protected int mDeclaredXmlVersion
        XML declaration from the input (1.0, 1.1 or 'unknown')
      • mFoundEncoding

        protected java.lang.String mFoundEncoding
        Value of encoding pseudo-attribute from xml declaration, if one was found; null otherwise.
      • mStandalone

        protected java.lang.String mStandalone
      • mXml11Handling

        protected boolean mXml11Handling
        Flag that indicates whether input read from this input source needs to be xml 1.1 compliant or not; if not, xml 1.0 is assumed. State of this flag depends on parent context (if one existed), or if not, on xml declaration of this input source.
      • mKeywordBuffer

        protected final char[] mKeywordBuffer
        Need a short buffer to read in values of pseudo-attributes (version, encoding, standalone). Don't really need tons of space; just enough for the longest anticipated encoding id... and maybe few chars just in case (for additional white space that we ignore)
    • Constructor Detail

      • InputBootstrapper

        protected InputBootstrapper​(java.lang.String pubId,
                                    SystemId sysId)
    • Method Detail

      • bootstrapInput

        public abstract java.io.Reader bootstrapInput​(ReaderConfig cfg,
                                                      boolean mainDoc,
                                                      int xmlVersion)
                                               throws java.io.IOException,
                                                      javax.xml.stream.XMLStreamException
        Parameters:
        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.
        Throws:
        java.io.IOException
        javax.xml.stream.XMLStreamException
      • getPublicId

        public java.lang.String getPublicId()
      • getSystemId

        public SystemId getSystemId()
      • getDeclaredVersion

        public int getDeclaredVersion()
      • declaredXml11

        public boolean declaredXml11()
        Returns:
        True, if the input bootstrapped declared that it conforms to xml 1.1 (independent of where it was included from)
      • getStandalone

        public java.lang.String getStandalone()
      • getDeclaredEncoding

        public java.lang.String getDeclaredEncoding()
        Returns:
        Encoding declaration found from the xml declaration, if any; null if none.
      • getInputTotal

        public abstract int getInputTotal()
        Returns:
        Total number of characters read from bootstrapped input (stream, reader)
      • getInputRow

        public int getInputRow()
      • getInputColumn

        public abstract int getInputColumn()
      • getInputEncoding

        public abstract java.lang.String getInputEncoding()
        Actual character encoding used by the underlying input source; may have been passed by the application, or auto-detected by byte stream boot strapper (can not be determined from a Reader source).
        Returns:
        Input encoding in use, if it could be determined or was passed by the calling application
      • readXmlDecl

        protected void readXmlDecl​(boolean isMainDoc,
                                   int xmlVersion)
                            throws java.io.IOException,
                                   WstxException
        Parameters:
        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.
        Throws:
        java.io.IOException
        WstxException
      • readXmlVersion

        private final int readXmlVersion()
                                  throws java.io.IOException,
                                         WstxException
        Returns:
        Xml version declaration read
        Throws:
        java.io.IOException
        WstxException
      • readXmlEncoding

        private final java.lang.String readXmlEncoding()
                                                throws java.io.IOException,
                                                       WstxException
        Throws:
        java.io.IOException
        WstxException
      • readXmlStandalone

        private final java.lang.String readXmlStandalone()
                                                  throws java.io.IOException,
                                                         WstxException
        Throws:
        java.io.IOException
        WstxException
      • handleEq

        private final int handleEq​(java.lang.String attr)
                            throws java.io.IOException,
                                   WstxException
        Throws:
        java.io.IOException
        WstxException
      • getWsOrChar

        private final int getWsOrChar​(int ok)
                               throws java.io.IOException,
                                      WstxException
        Method that should get next character, which has to be either specified character (usually end marker), OR, any character as long as there' at least one space character before it.
        Throws:
        java.io.IOException
        WstxException
      • pushback

        protected abstract void pushback()
      • getNextAfterWs

        protected abstract int getNextAfterWs​(boolean reqWs)
                                       throws java.io.IOException,
                                              WstxException
        Throws:
        java.io.IOException
        WstxException
      • checkKeyword

        protected abstract int checkKeyword​(java.lang.String exp)
                                     throws java.io.IOException,
                                            WstxException
        Returns:
        First character that does not match expected, if any; CHAR_NULL if match succeeded
        Throws:
        java.io.IOException
        WstxException
      • readQuotedValue

        protected abstract int readQuotedValue​(char[] kw,
                                               int quoteChar)
                                        throws java.io.IOException,
                                               WstxException
        Throws:
        java.io.IOException
        WstxException
      • getLocation

        protected abstract javax.xml.stream.Location getLocation()
      • reportUnexpectedChar

        protected void reportUnexpectedChar​(int i,
                                            java.lang.String msg)
                                     throws WstxException
        Throws:
        WstxException
      • reportPseudoAttrProblem

        private final void reportPseudoAttrProblem​(java.lang.String attrName,
                                                   java.lang.String got,
                                                   java.lang.String expVal1,
                                                   java.lang.String expVal2)
                                            throws WstxException
        Throws:
        WstxException