Class X2PullParser

java.lang.Object
org.gjt.xpp.x2impl.x2pullparser.X2PullParser
All Implemented Interfaces:
org.apache.xerces.xni.parser.XMLErrorHandler, org.apache.xerces.xni.XMLDocumentHandler, XmlPullParser, XmlPullParserBufferControl, XmlPullParserEventPosition

public class X2PullParser extends Object implements XmlPullParser, XmlPullParserEventPosition, XmlPullParserBufferControl, org.apache.xerces.xni.parser.XMLErrorHandler, org.apache.xerces.xni.XMLDocumentHandler
This is Xerces 2 driver that uses XNI pull parsing capabilities to implement XML Pull Parser API. Advantages:
  • uses Xerces 2 and bases in stable and standard compliant parser
  • uses Xerces 2 XNI in pull parser mode but hides complexity of working with XNI with simple PullParser API
Limitations:
  • this is alpha version - may have still bugs :-)
Author:
Aleksander Slominski
  • Field Details

    • NAMESPACES_FEATURE_ID

      protected static final String NAMESPACES_FEATURE_ID
      See Also:
    • NAMESPACE_PREFIXES_FEATURE_ID

      protected static final String NAMESPACE_PREFIXES_FEATURE_ID
      See Also:
    • pullParserConfiguration

      protected org.apache.xerces.xni.parser.XMLPullParserConfiguration pullParserConfiguration
    • locator

      protected org.apache.xerces.xni.XMLLocator locator
    • attrQName

      protected org.apache.xerces.xni.QName attrQName
    • needToSetInput

      protected boolean needToSetInput
    • cumulativeReader

      protected X2PullParser.CumulativeReader cumulativeReader
    • inputSource

      protected org.apache.xerces.xni.parser.XMLInputSource inputSource
    • shrinkable

      protected boolean shrinkable
    • emptyElement

      protected boolean emptyElement
      Have we read empty element?
    • supportNs

      protected boolean supportNs
      should parser support namespaces?
    • reportNsAttribs

      protected boolean reportNsAttribs
      should parser report namespace xmlns* attributes ?
    • allowedMixedContent

      protected boolean allowedMixedContent
    • seenException

      protected Exception seenException
    • disableOffsetTracking

      protected boolean disableOffsetTracking
    • contentEventStart

      protected int contentEventStart
    • contentEventEnd

      protected int contentEventEnd
    • eventStart

      protected int eventStart
      start position of current event in tokenizer biffer
    • eventEnd

      protected int eventEnd
      end position of current event in tokenizer biffer
    • seenRootElement

      protected boolean seenRootElement
      Have we seen root element
    • contentBuf

      protected StringBuffer contentBuf
      Content of current element if in CONTENT state
    • state

      protected byte state
      what is current event type as returned from next()?
    • prefix2Ns

      protected Hashtable prefix2Ns
      mapping of names prefixes to uris
    • attrPosEnd

      protected int attrPosEnd
      index for last attribute in attrPos array
    • attrPosSize

      protected int attrPosSize
      size of attrPos array
    • attrPos

      protected X2Attribute[] attrPos
      temporary array of current attributes
    • elStackDepth

      protected int elStackDepth
      how many elements are on elStack
    • elStackSize

      protected int elStackSize
      size of elStack array
    • elStack

      protected X2ElementContent[] elStack
      temprary array to keep ElementContent stack
    • startTagInitialized

      protected boolean startTagInitialized
    • seenContent

      protected boolean seenContent
    • gotContent

      protected boolean gotContent
    • nonWhitespaceContent

      protected boolean nonWhitespaceContent
    • seenCR

      protected boolean seenCR
    • mixInElement

      protected boolean mixInElement
    • nextState

      protected byte nextState
    • fDocumentSource

      protected org.apache.xerces.xni.parser.XMLDocumentSource fDocumentSource
      Document source
    • POS_ABSOLUTE_START

      public final String POS_ABSOLUTE_START
      See Also:
    • POS_ABSOLUTE_END

      public final String POS_ABSOLUTE_END
      See Also:
  • Constructor Details

  • Method Details

    • warning

      public void warning(String domain, String key, org.apache.xerces.xni.parser.XMLParseException ex) throws org.apache.xerces.xni.XNIException
      Warning.
      Specified by:
      warning in interface org.apache.xerces.xni.parser.XMLErrorHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • error

      public void error(String domain, String key, org.apache.xerces.xni.parser.XMLParseException ex) throws org.apache.xerces.xni.XNIException
      Error.
      Specified by:
      error in interface org.apache.xerces.xni.parser.XMLErrorHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • fatalError

      public void fatalError(String domain, String key, org.apache.xerces.xni.parser.XMLParseException ex) throws org.apache.xerces.xni.XNIException
      Fatal error.
      Specified by:
      fatalError in interface org.apache.xerces.xni.parser.XMLErrorHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • setDocumentSource

      public void setDocumentSource(org.apache.xerces.xni.parser.XMLDocumentSource source)
      Sets the document source
      Specified by:
      setDocumentSource in interface org.apache.xerces.xni.XMLDocumentHandler
    • getDocumentSource

      public org.apache.xerces.xni.parser.XMLDocumentSource getDocumentSource()
      Returns the document source
      Specified by:
      getDocumentSource in interface org.apache.xerces.xni.XMLDocumentHandler
    • startDocument

      public void startDocument(org.apache.xerces.xni.XMLLocator locator, String encoding, org.apache.xerces.xni.NamespaceContext namespaceContext, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      startDocument in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • startDocument

      public void startDocument(org.apache.xerces.xni.XMLLocator locator, String encoding, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Throws:
      org.apache.xerces.xni.XNIException
    • xmlDecl

      public void xmlDecl(String version, String encoding, String standalone, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      xmlDecl in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • doctypeDecl

      public void doctypeDecl(String rootElement, String publicId, String systemId, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      doctypeDecl in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • comment

      public void comment(org.apache.xerces.xni.XMLString text, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      comment in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • processingInstruction

      public void processingInstruction(String target, org.apache.xerces.xni.XMLString data, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      processingInstruction in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • startGeneralEntity

      public void startGeneralEntity(String name, org.apache.xerces.xni.XMLResourceIdentifier identifier, String encoding, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      startGeneralEntity in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • endGeneralEntity

      public void endGeneralEntity(String name, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      endGeneralEntity in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • startPrefixMapping

      public void startPrefixMapping(String prefix, String uri, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Throws:
      org.apache.xerces.xni.XNIException
    • startElement

      public void startElement(org.apache.xerces.xni.QName element, org.apache.xerces.xni.XMLAttributes attributes, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      startElement in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • emptyElement

      public void emptyElement(org.apache.xerces.xni.QName element, org.apache.xerces.xni.XMLAttributes attributes, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      emptyElement in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • startEntity

      public void startEntity(String name, String publicId, String systemId, String baseSystemId, String encoding, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Throws:
      org.apache.xerces.xni.XNIException
    • textDecl

      public void textDecl(String version, String encoding, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      textDecl in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • endEntity

      public void endEntity(String name, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Throws:
      org.apache.xerces.xni.XNIException
    • characters

      public void characters(org.apache.xerces.xni.XMLString text, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      characters in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • ignorableWhitespace

      public void ignorableWhitespace(org.apache.xerces.xni.XMLString text, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      ignorableWhitespace in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • endElement

      public void endElement(org.apache.xerces.xni.QName element, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      endElement in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • endPrefixMapping

      public void endPrefixMapping(String prefix, org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Throws:
      org.apache.xerces.xni.XNIException
    • startCDATA

      public void startCDATA(org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      startCDATA in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • endCDATA

      public void endCDATA(org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      endCDATA in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • endDocument

      public void endDocument(org.apache.xerces.xni.Augmentations augs) throws org.apache.xerces.xni.XNIException
      Specified by:
      endDocument in interface org.apache.xerces.xni.XMLDocumentHandler
      Throws:
      org.apache.xerces.xni.XNIException
    • next

      public byte next() throws XmlPullParserException, IOException
      This is a key method - translates XNI callbacks into XPP events (such as START_TAG, END_TAG, CONTENT). or END_DOCUMENT if no more input.
      Specified by:
      next in interface XmlPullParser
      Throws:
      XmlPullParserException
      IOException
    • setInput

      public void setInput(Reader reader) throws XmlPullParserException
      Reset parser and set new input.
      Specified by:
      setInput in interface XmlPullParser
      Throws:
      XmlPullParserException
    • setInput

      public void setInput(char[] buf) throws XmlPullParserException
      Reset parser and set new input.
      Specified by:
      setInput in interface XmlPullParser
      Throws:
      XmlPullParserException
    • setInput

      public void setInput(char[] buf, int off, int len) throws XmlPullParserException
      Description copied from interface: XmlPullParser
      Set the input for parser.
      Specified by:
      setInput in interface XmlPullParser
      Throws:
      XmlPullParserException
    • reset

      public void reset()
      Reset parser state so it can be used to parse new
      Specified by:
      reset in interface XmlPullParser
    • isAllowedMixedContent

      public boolean isAllowedMixedContent()
      Description copied from interface: XmlPullParser
      Is mixed element context allowed?
      Specified by:
      isAllowedMixedContent in interface XmlPullParser
    • setAllowedMixedContent

      public void setAllowedMixedContent(boolean enable) throws XmlPullParserException
      Allow for mixed element content. Enabled by default. When disbaled element must containt either text or other elements.
      Specified by:
      setAllowedMixedContent in interface XmlPullParser
      Throws:
      XmlPullParserException
    • isNamespaceAware

      public boolean isNamespaceAware()
      Description copied from interface: XmlPullParser
      Is parser namespace aware?
      Specified by:
      isNamespaceAware in interface XmlPullParser
    • setNamespaceAware

      public void setNamespaceAware(boolean awareness) throws XmlPullParserException
      Set support of namespaces. Disabled by default.
      Specified by:
      setNamespaceAware in interface XmlPullParser
      Throws:
      XmlPullParserException
    • isNamespaceAttributesReporting

      public boolean isNamespaceAttributesReporting()
      Description copied from interface: XmlPullParser
      Is parser going to report namespace attributes (xmlns*) ?
      Specified by:
      isNamespaceAttributesReporting in interface XmlPullParser
    • setNamespaceAttributesReporting

      public void setNamespaceAttributesReporting(boolean enable) throws XmlPullParserException
      Make parser to report xmlns* attributes. Disabled by default. Only meaningful when namespaces are enabled (when namespaces are disabled all attributes are always reported).
      Specified by:
      setNamespaceAttributesReporting in interface XmlPullParser
      Throws:
      XmlPullParserException
    • getNamespaceUri

      public String getNamespaceUri()
      Description copied from interface: XmlPullParser
      Returns the namespace URI of the current element Returns null if not applicable (current event must be START_TAG or END_TAG)
      Specified by:
      getNamespaceUri in interface XmlPullParser
    • getLocalName

      public String getLocalName()
      Description copied from interface: XmlPullParser
      Returns the local name of the current element (current event must be START_TAG or END_TAG)
      Specified by:
      getLocalName in interface XmlPullParser
    • getPrefix

      public String getPrefix()
      Description copied from interface: XmlPullParser
      Returns the prefix of the current element or null if elemet has no prefix. (current event must be START_TAG or END_TAG)
      Specified by:
      getPrefix in interface XmlPullParser
    • getRawName

      public String getRawName()
      Description copied from interface: XmlPullParser
      Returns the raw name (prefix + ':' + localName) of the current element (current event must be START_TAG or END_TAG)
      Specified by:
      getRawName in interface XmlPullParser
    • getQNameLocal

      public String getQNameLocal(String qName)
      Description copied from interface: XmlPullParser
      Return local part of qname. For example for 'xsi:type' it returns 'type'.
      Specified by:
      getQNameLocal in interface XmlPullParser
    • getQNameUri

      public String getQNameUri(String qName) throws XmlPullParserException
      Description copied from interface: XmlPullParser
      Return uri part of qname. It is depending on current state of parser to find what namespace uri is mapped from namespace prefix. For example for 'xsi:type' if xsi namespace prefix was declared to 'urn:foo' it will return 'urn:foo'.
      Specified by:
      getQNameUri in interface XmlPullParser
      Throws:
      XmlPullParserException
    • getDepth

      public int getDepth()
      Description copied from interface: XmlPullParser
      Returns the current depth of the element.
      Specified by:
      getDepth in interface XmlPullParser
    • getNamespacesLength

      public int getNamespacesLength(int depth)
      Specified by:
      getNamespacesLength in interface XmlPullParser
    • readNamespacesPrefixes

      public void readNamespacesPrefixes(int depth, String[] prefixes, int off, int len) throws XmlPullParserException
      Return namespace prefixes for element at depth
      Specified by:
      readNamespacesPrefixes in interface XmlPullParser
      Throws:
      XmlPullParserException
    • readNamespacesUris

      public void readNamespacesUris(int depth, String[] uris, int off, int len) throws XmlPullParserException
      Return namespace URIs for element at depth
      Specified by:
      readNamespacesUris in interface XmlPullParser
      Throws:
      XmlPullParserException
    • getPosDesc

      public String getPosDesc()
      Return string describing current position of parser in input stream as text 'at line %d (row) and column %d (colum) [seen %s...]'.
      Specified by:
      getPosDesc in interface XmlPullParser
    • getLineNumber

      public int getLineNumber()
      Specified by:
      getLineNumber in interface XmlPullParser
    • getColumnNumber

      public int getColumnNumber()
      Specified by:
      getColumnNumber in interface XmlPullParser
    • getEventType

      public byte getEventType()
      Description copied from interface: XmlPullParser
      Returns the type of the current element (START_TAG, END_TAG, CONTENT, etc)
      Specified by:
      getEventType in interface XmlPullParser
    • isWhitespaceContent

      public boolean isWhitespaceContent() throws XmlPullParserException
      Return true if just read CONTENT contained only white spaces.
      Specified by:
      isWhitespaceContent in interface XmlPullParser
      Throws:
      XmlPullParserException
    • getContentLength

      public int getContentLength() throws XmlPullParserException
      Description copied from interface: XmlPullParser
      Return how big is content.

      NOTE: parser must be on CONTENT event.

      Specified by:
      getContentLength in interface XmlPullParser
      Throws:
      XmlPullParserException
    • readContent

      public String readContent() throws XmlPullParserException
      Return String that contains just read CONTENT.
      Specified by:
      readContent in interface XmlPullParser
      Throws:
      XmlPullParserException
    • readEndTag

      public void readEndTag(XmlEndTag etag) throws XmlPullParserException
      Read value of just read END_TAG into passed as argument EndTag.
      Specified by:
      readEndTag in interface XmlPullParser
      Throws:
      XmlPullParserException
    • readStartTag

      public void readStartTag(XmlStartTag stag) throws XmlPullParserException
      Read value of just read START_TAG into passed as argument StartTag.
      Specified by:
      readStartTag in interface XmlPullParser
      Throws:
      XmlPullParserException
    • readNodeWithoutChildren

      public void readNodeWithoutChildren(XmlNode node) throws XmlPullParserException
      Description copied from interface: XmlPullParser
      Read node: it calls readStartTag and then if parser is namespaces aware currently declared nemaspeces will be added and defaultNamespace will be set.

      NOTE: parser must be on START_TAG event. and all events will written into node!

      Specified by:
      readNodeWithoutChildren in interface XmlPullParser
      Throws:
      XmlPullParserException
    • readNode

      public byte readNode(XmlNode node) throws XmlPullParserException, IOException
      Description copied from interface: XmlPullParser
      Read subtree into node: call readNodeWithoutChildren and then parse subtree adding children (values obtained with readXontent or readNodeWithoutChildren).

      NOTE: parser must be on START_TAG event. and all events will written into node!

      Specified by:
      readNode in interface XmlPullParser
      Throws:
      XmlPullParserException
      IOException
    • skipNode

      public byte skipNode() throws XmlPullParserException, IOException
      If parser has just read start tag it allows to skip whoole subtree contined in this element. Returns when encounters end tag matching the start tag.
      Specified by:
      skipNode in interface XmlPullParser
      Throws:
      XmlPullParserException
      IOException
    • getHardLimit

      public int getHardLimit()
      Specified by:
      getHardLimit in interface XmlPullParserBufferControl
    • setHardLimit

      public void setHardLimit(int value) throws XmlPullParserException
      Specified by:
      setHardLimit in interface XmlPullParserBufferControl
      Throws:
      XmlPullParserException
    • getSoftLimit

      public int getSoftLimit()
      Specified by:
      getSoftLimit in interface XmlPullParserBufferControl
    • setSoftLimit

      public void setSoftLimit(int value) throws XmlPullParserException
      Specified by:
      setSoftLimit in interface XmlPullParserBufferControl
      Throws:
      XmlPullParserException
    • getBufferShrinkOffset

      public int getBufferShrinkOffset()
      Specified by:
      getBufferShrinkOffset in interface XmlPullParserBufferControl
    • setBufferShrinkable

      public void setBufferShrinkable(boolean shrinkable) throws XmlPullParserException
      Specified by:
      setBufferShrinkable in interface XmlPullParserBufferControl
      Throws:
      XmlPullParserException
    • isBufferShrinkable

      public boolean isBufferShrinkable()
      Specified by:
      isBufferShrinkable in interface XmlPullParserBufferControl
    • getEventStart

      public int getEventStart()
      Specified by:
      getEventStart in interface XmlPullParserEventPosition
    • getEventEnd

      public int getEventEnd()
      Specified by:
      getEventEnd in interface XmlPullParserEventPosition
    • getEventBuffer

      public char[] getEventBuffer()
      Description copied from interface: XmlPullParserEventPosition

      NOTE: This may be internal buffer and is valud only until call to method next()- do NOT attempt modify !

      Specified by:
      getEventBuffer in interface XmlPullParserEventPosition
    • ensureCapacity

      protected void ensureCapacity(int size)
      Make sure that we have enough space to keep element stack if passed size.
    • ensureAttribs

      protected void ensureAttribs(int size)
      Make sure that in attributes temporary array is enough space.
    • resetState

      protected void resetState()