Class XMLStreamBuffer

  • Direct Known Subclasses:
    MutableXMLStreamBuffer, XMLStreamBufferMark

    public abstract class XMLStreamBuffer
    extends Object
    An immutable stream-based buffer of an XML infoset.

    A XMLStreamBuffer is an abstract class. It is immutable with respect to the methods on the class, which are non-modifying in terms of state.

    A XMLStreamBuffer can be processed using specific SAX and StAX-based processors. Utility methods on XMLStreamBuffer are provided for such functionality that utilize SAX and StAX-based processors. The same instance of a XMLStreamBuffer may be processed multiple times and concurrently by more than one processor.

    There are two concrete implementations of XMLStreamBuffer. The first, MutableXMLStreamBuffer, can be instantiated for the creation of a buffer using SAX and StAX-based creators, and from which may be processed as an XMLStreamBuffer. The second, XMLStreamBufferMark, can be instantiated to mark into an existing buffer that is being created or processed. This allows a subtree of XMLStreamBuffer to be treated as its own XMLStreamBuffer.

    A XMLStreamBuffer can represent a complete XML infoset or a subtree of an XML infoset. It is also capable of representing a "forest", where the buffer represents multiple adjacent XML elements, although in this mode there are restrictions about how you can consume such forest, because not all XML APIs handle forests very well.

    • Field Detail

      • _inscopeNamespaces

        protected Map<String,​String> _inscopeNamespaces
        In scope namespaces on a fragment
      • _hasInternedStrings

        protected boolean _hasInternedStrings
        True if the buffer was created from a parser that interns Strings as specified by the SAX interning features
      • _structure

        protected com.sun.xml.stream.buffer.FragmentedArray<byte[]> _structure
        Fragmented array to hold structural information
      • _structurePtr

        protected int _structurePtr
      • _structureStrings

        protected com.sun.xml.stream.buffer.FragmentedArray<String[]> _structureStrings
        Fragmented array to hold structural information as strings
      • _structureStringsPtr

        protected int _structureStringsPtr
      • _contentCharactersBuffer

        protected com.sun.xml.stream.buffer.FragmentedArray<char[]> _contentCharactersBuffer
        Fragmented array to hold content information in a shared char[]
      • _contentCharactersBufferPtr

        protected int _contentCharactersBufferPtr
      • _contentObjects

        protected com.sun.xml.stream.buffer.FragmentedArray<Object[]> _contentObjects
        Fragmented array to hold content information as objects
      • _contentObjectsPtr

        protected int _contentObjectsPtr
      • treeCount

        protected int treeCount
        Number of trees in this stream buffer.

        1 if there's only one, which is the normal case. When the buffer holds a forest, this value is greater than 1. If the buffer is empty, then 0.

        Notice that we cannot infer this value by looking at the FragmentedArrays, because this XMLStreamBuffer maybe a view of a portion of another bigger XMLStreamBuffer.

      • systemId

        protected String systemId
        The system identifier associated with the buffer
    • Constructor Detail

      • XMLStreamBuffer

        public XMLStreamBuffer()
    • Method Detail

      • isCreated

        public final boolean isCreated()
        Is the buffer created by creator.
        Returns:
        true if the buffer has been created.
      • isFragment

        public final boolean isFragment()
        Is the buffer a representation of a fragment of an XML infoset.
        Returns:
        true if the buffer is a representation of a fragment of an XML infoset.
      • isElementFragment

        public final boolean isElementFragment()
        Is the buffer a representation of a fragment of an XML infoset that is an element (and its contents).
        Returns:
        true if the buffer a representation of a fragment of an XML infoset that is an element (and its contents).
      • isForest

        public final boolean isForest()
        Returns ture if this buffer represents a forest, which is are more than one adjacent XML elements.
      • getSystemId

        public final String getSystemId()
        Get the system identifier associated with the buffer.
        Returns:
        The system identifier.
      • getInscopeNamespaces

        public final Map<String,​String> getInscopeNamespaces()
        Get the in-scope namespaces.

        The in-scope namespaces will be empty if the buffer is not a fragment (isFragment() returns false). The in-scope namespace will correspond to the in-scope namespaces of the fragment if the buffer is a fragment (isFragment() returns false). The in-scope namespaces will include any namespace delcarations on an element if the fragment correspond to that of an element (isElementFragment() returns false).

        Returns:
        The in-scope namespaces of the XMLStreamBuffer. Prefix to namespace URI.
      • hasInternedStrings

        public final boolean hasInternedStrings()
        Has the buffer been created using Strings that have been interned for certain properties of information items. The Strings that are interned are those that correspond to Strings that are specified by the SAX API "string-interning" property (see here).

        An buffer may have been created, for example, from an XML document parsed using the Xerces SAX parser. The Xerces SAX parser will have interned certain Strings according to the SAX string interning property. This method enables processors to avoid the duplication of String interning if such a feature is required by a procesing application and the buffer being processed was created using Strings that have been interned.

        Returns:
        true if the buffer has been created using Strings that have been interned.
      • readAsXMLReader

        public final SAXBufferProcessor readAsXMLReader​(boolean produceFragmentEvent)
        Reads the contents of the buffer from a XMLReader.
        Parameters:
        produceFragmentEvent - True to generate fragment SAX events without start/endDocument. False to generate a full document SAX events.
        Returns:
        A an instance of a SAXBufferProcessor.
      • writeTo

        public final void writeTo​(ContentHandler handler,
                                  boolean produceFragmentEvent)
                           throws SAXException
        Write the contents of the buffer to a ContentHandler.

        If the handler is also an instance of other SAX-based handlers, such as LexicalHandler, than corresponding SAX events will be reported to those handlers.

        Parameters:
        handler - The ContentHandler to receive SAX events.
        produceFragmentEvent - True to generate fragment SAX events without start/endDocument. False to generate a full document SAX events.
        Throws:
        SAXException - if a parsing fails, or if ContentHandler throws a SAXException.
      • getStructure

        protected final com.sun.xml.stream.buffer.FragmentedArray<byte[]> getStructure()
      • getStructurePtr

        protected final int getStructurePtr()
      • getStructureStrings

        protected final com.sun.xml.stream.buffer.FragmentedArray<String[]> getStructureStrings()
      • getStructureStringsPtr

        protected final int getStructureStringsPtr()
      • getContentCharactersBuffer

        protected final com.sun.xml.stream.buffer.FragmentedArray<char[]> getContentCharactersBuffer()
      • getContentCharactersBufferPtr

        protected final int getContentCharactersBufferPtr()
      • getContentObjects

        protected final com.sun.xml.stream.buffer.FragmentedArray<Object[]> getContentObjects()
      • getContentObjectsPtr

        protected final int getContentObjectsPtr()