com.sun.xml.fastinfoset
Class Decoder

java.lang.Object
  extended bycom.sun.xml.fastinfoset.Decoder
All Implemented Interfaces:
FastInfosetParser
Direct Known Subclasses:
DOMDocumentParser, SAXDocumentParser, StAXDocumentParser

public abstract class Decoder
extends java.lang.Object
implements FastInfosetParser

Abstract decoder for developing concrete encoders. Concrete implementations extending Decoder will utilize methods on Decoder to decode XML infoset according to the Fast Infoset standard. It is the responsibility of the concrete implementation to ensure that methods are invoked in the correct order to correctly decode a valid fast infoset document.

This class extends org.sax.xml.DefaultHandler so that concrete SAX implementations can be used with javax.xml.parsers.SAXParser and the parse methods that take org.sax.xml.DefaultHandler as a parameter.

Buffering of octets that are read from an InputStream is supported in a similar manner to a BufferedInputStream. Combining buffering with decoding enables better performance.

More than one fast infoset document may be decoded from the InputStream.


Nested Class Summary
protected  class Decoder.EncodingAlgorithmInputStream
           
 
Field Summary
protected  boolean _addToTable
          True if an entry is required to be added to a table
protected  QualifiedNameArray _attributeNameTable
          The attribute name table of the vocabulary.
protected  StringArray _attributeValueTable
          The attribute value table of the vocabulary.
protected  int _b
          The current octet that is being read
protected  int _bufferSize
          The size of the internal buffer.
protected  ContiguousCharArrayArray _characterContentChunkTable
          The character content chunk table of the vocabulary.
protected  char[] _charBuffer
          The internal buffer of characters.
protected  int _charBufferLength
          The length of characters in the buffer of characters.
protected  boolean _doubleTerminate
          True if two information item are terminated in direct sequence.
protected  DuplicateAttributeVerifier _duplicateAttributeVerifier
          Helper class that checks for duplicate attribute information items.
protected  QualifiedNameArray _elementNameTable
          The element name table of the vocabulary.
protected  int _identifier
          The vocabulary table index of identifying string or the identifier of an encoding algorithm or restricted alphabet.
protected  int _integer
          The vocabulary table index to an indexed non identifying string.
protected  int _namespaceNameIndex
           
protected  java.util.List _notations
          The list of Notation Information Items that are part of the Document Information Item.
protected  byte[] _octetBuffer
          The internal buffer used for decoding.
protected  int _octetBufferEnd
          The end of the buffer.
protected  int _octetBufferLength
          The length of some octets in the buffer that are to be read.
protected  int _octetBufferOffset
          The offset into the buffer to read the next byte.
protected  int _octetBufferStart
          A mark into the internal buffer used for decoding encoded algorithm or restricted alphabet data.
protected  boolean _parseFragments
          True if can parse fragments.
protected  int _prefixIndex
           
protected  PrefixArray _prefixTable
          The prefix table of the vocabulary.
protected  java.util.Map _registeredEncodingAlgorithms
          The map of URIs to registered encoding algorithms.
protected  boolean _terminate
          True if an information item is terminated.
protected  java.util.List _unparsedEntities
          The list of Unparsed Entity Information Items that are part of the Document Information Item.
protected  ParserVocabulary _v
          The vocabulary used for decoding.
static java.lang.String BUFFER_SIZE_SYSTEM_PROPERTY
          Internal buffer size interning system property.
protected static int NISTRING_EMPTY_STRING
           
protected static int NISTRING_ENCODING_ALGORITHM
           
protected static int NISTRING_INDEX
           
protected static int NISTRING_STRING
           
static java.lang.String STRING_INTERNING_SYSTEM_PROPERTY
          String interning system property.
protected static char[] XML_NAMESPACE_NAME_CHARS
           
protected static char[] XMLNS_NAMESPACE_NAME_CHARS
           
protected static char[] XMLNS_NAMESPACE_PREFIX_CHARS
           
 
Fields inherited from interface org.jvnet.fastinfoset.FastInfosetParser
BUFFER_SIZE_PROPERTY, EXTERNAL_VOCABULARIES_PROPERTY, REGISTERED_ENCODING_ALGORITHMS_PROPERTY, STRING_INTERNING_PROPERTY
 
Constructor Summary
protected Decoder()
          Default constructor for the Decoder.
 
Method Summary
protected  boolean _isFastInfosetDocument()
           
protected  java.lang.String createQualifiedNameString(char[] first, java.lang.String second)
           
protected  void decodeAdditionalData()
           
protected  void decodeAlphabetOctetsAsCharBuffer(char[] restrictedAlphabet)
           
protected  java.lang.String decodeCharacterEncodingScheme()
           
protected  void decodeDII()
           
protected  QualifiedName decodeEIIIndexLarge()
           
protected  QualifiedName decodeEIIIndexMedium()
           
protected  void decodeFourBitAlphabetOctetsAsCharBuffer(char[] restrictedAlphabet)
           
protected  void decodeHeader()
           
protected  java.lang.String decodeIdentifyingNonEmptyStringIndexOnFirstBitAsNamespaceName(boolean prefixPresent)
           
protected  java.lang.String decodeIdentifyingNonEmptyStringIndexOnFirstBitAsPrefix(boolean namespaceNamePresent)
           
protected  java.lang.String decodeIdentifyingNonEmptyStringOnFirstBit(StringArray table)
           
protected  java.lang.String decodeIdentifyingNonEmptyStringOnFirstBitAsNamespaceName(boolean prefixPresent)
           
protected  java.lang.String decodeIdentifyingNonEmptyStringOnFirstBitAsPrefix(boolean namespaceNamePresent)
           
protected  void decodeInitialVocabulary()
           
protected  int decodeIntegerIndexOnSecondBit()
           
protected  QualifiedName decodeLiteralQualifiedName(int state, QualifiedName q)
           
protected  void decodeNonEmptyOctetStringLengthOnSecondBit()
           
protected  void decodeNonEmptyOctetStringOnSecondBitAsUtf8CharArray()
           
protected  java.lang.String decodeNonEmptyOctetStringOnSecondBitAsUtf8String()
           
protected  int decodeNonIdentifyingStringOnFirstBit()
           
protected  void decodeNotations()
           
protected  void decodeOctetsOnFifthBitOfNonIdentifyingStringOnFirstBit(int b)
           
protected  void decodeOctetsOnSeventhBitOfNonIdentifyingStringOnThirdBit(int b)
           
protected  java.lang.String decodeRAOctetsAsString(char[] restrictedAlphabet)
           
protected  void decodeRestrictedAlphabetAsCharBuffer()
           
protected  java.lang.String decodeRestrictedAlphabetAsString()
           
protected  void decodeUnparsedEntities()
           
protected  void decodeUtf16StringAsCharBuffer()
           
protected  java.lang.String decodeUtf16StringAsString()
           
protected  void decodeUtf8NCNameIntoCharBuffer()
           
protected  void decodeUtf8StringAsCharBuffer()
           
protected  void decodeUtf8StringAsCharBuffer(char[] ch, int offset)
           
protected  java.lang.String decodeUtf8StringAsString()
           
protected  void decodeUtf8StringIntoCharBuffer()
           
protected  void decodeUtf8StringIntoCharBuffer(char[] ch, int offset)
           
protected  java.lang.String decodeVersion()
           
 int getBufferSize()
          Get the buffer size.
 java.util.Map getExternalVocabularies()
          Get the map of referenced external vocabularies.
 boolean getParseFragments()
          Return the parse fragments property.
 java.util.Map getRegisteredEncodingAlgorithms()
          Gets the set of registered encoding algorithms.
 boolean getStringInterning()
          Return the string interning property.
static boolean isFastInfosetDocument(java.io.InputStream s)
           
protected  int peek()
           
protected  int peek(OctetBufferListener octetBufferListener)
           
protected  int peek2(OctetBufferListener octetBufferListener)
           
protected  int read()
           
 void reset()
          Reset the decoder for reuse decoding another XML infoset.
 void setBufferSize(int bufferSize)
          Set the buffer size.

The size of the buffer for parsing is set using this method. Requests for sizes smaller then the current size will be ignored. Otherwise the buffer will be resized when the next parse is performed.

 void setExternalVocabularies(java.util.Map referencedVocabualries)
          Set the map of referenced external vocabularies.

The map (but not the keys and values) be cloned.

 void setInputStream(java.io.InputStream s)
          Set the InputStream to decode the fast infoset document.
 void setParseFragments(boolean parseFragments)
          Set the parse fragments property.

If the parse fragments property is set to true then then fragments of an XML infoset may be parsed.

 void setRegisteredEncodingAlgorithms(java.util.Map algorithms)
          Sets the set of registered encoding algorithms.
 void setStringInterning(boolean stringInterning)
          Set the string interning property.

If the string interning property is set to true then String objects instantiated for [namespace name], [prefix] and [local name] infoset properties will be interned using the method String.intern().

 void setVocabulary(ParserVocabulary v)
          Set the ParserVocabulary to be used for decoding.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

XML_NAMESPACE_NAME_CHARS

protected static final char[] XML_NAMESPACE_NAME_CHARS

XMLNS_NAMESPACE_PREFIX_CHARS

protected static final char[] XMLNS_NAMESPACE_PREFIX_CHARS

XMLNS_NAMESPACE_NAME_CHARS

protected static final char[] XMLNS_NAMESPACE_NAME_CHARS

STRING_INTERNING_SYSTEM_PROPERTY

public static final java.lang.String STRING_INTERNING_SYSTEM_PROPERTY
String interning system property.

See Also:
Constant Field Values

BUFFER_SIZE_SYSTEM_PROPERTY

public static final java.lang.String BUFFER_SIZE_SYSTEM_PROPERTY
Internal buffer size interning system property.

See Also:
Constant Field Values

_parseFragments

protected boolean _parseFragments
True if can parse fragments.


_notations

protected java.util.List _notations
The list of Notation Information Items that are part of the Document Information Item.


_unparsedEntities

protected java.util.List _unparsedEntities
The list of Unparsed Entity Information Items that are part of the Document Information Item.


_registeredEncodingAlgorithms

protected java.util.Map _registeredEncodingAlgorithms
The map of URIs to registered encoding algorithms.


_v

protected ParserVocabulary _v
The vocabulary used for decoding.


_prefixTable

protected PrefixArray _prefixTable
The prefix table of the vocabulary.


_elementNameTable

protected QualifiedNameArray _elementNameTable
The element name table of the vocabulary.


_attributeNameTable

protected QualifiedNameArray _attributeNameTable
The attribute name table of the vocabulary.


_characterContentChunkTable

protected ContiguousCharArrayArray _characterContentChunkTable
The character content chunk table of the vocabulary.


_attributeValueTable

protected StringArray _attributeValueTable
The attribute value table of the vocabulary.


_b

protected int _b
The current octet that is being read


_terminate

protected boolean _terminate
True if an information item is terminated.


_doubleTerminate

protected boolean _doubleTerminate
True if two information item are terminated in direct sequence.


_addToTable

protected boolean _addToTable
True if an entry is required to be added to a table


_integer

protected int _integer
The vocabulary table index to an indexed non identifying string.


_identifier

protected int _identifier
The vocabulary table index of identifying string or the identifier of an encoding algorithm or restricted alphabet.


_bufferSize

protected int _bufferSize
The size of the internal buffer.


_octetBuffer

protected byte[] _octetBuffer
The internal buffer used for decoding.


_octetBufferStart

protected int _octetBufferStart
A mark into the internal buffer used for decoding encoded algorithm or restricted alphabet data.


_octetBufferOffset

protected int _octetBufferOffset
The offset into the buffer to read the next byte.


_octetBufferEnd

protected int _octetBufferEnd
The end of the buffer.


_octetBufferLength

protected int _octetBufferLength
The length of some octets in the buffer that are to be read.


_charBuffer

protected char[] _charBuffer
The internal buffer of characters.


_charBufferLength

protected int _charBufferLength
The length of characters in the buffer of characters.


_duplicateAttributeVerifier

protected DuplicateAttributeVerifier _duplicateAttributeVerifier
Helper class that checks for duplicate attribute information items.


NISTRING_STRING

protected static final int NISTRING_STRING
See Also:
Constant Field Values

NISTRING_INDEX

protected static final int NISTRING_INDEX
See Also:
Constant Field Values

NISTRING_ENCODING_ALGORITHM

protected static final int NISTRING_ENCODING_ALGORITHM
See Also:
Constant Field Values

NISTRING_EMPTY_STRING

protected static final int NISTRING_EMPTY_STRING
See Also:
Constant Field Values

_prefixIndex

protected int _prefixIndex

_namespaceNameIndex

protected int _namespaceNameIndex
Constructor Detail

Decoder

protected Decoder()
Default constructor for the Decoder.

Method Detail

setStringInterning

public void setStringInterning(boolean stringInterning)
Set the string interning property.

If the string interning property is set to true then String objects instantiated for [namespace name], [prefix] and [local name] infoset properties will be interned using the method String.intern().

Specified by:
setStringInterning in interface FastInfosetParser
Parameters:
stringInterning - The string interning property.

getStringInterning

public boolean getStringInterning()
Return the string interning property.

Specified by:
getStringInterning in interface FastInfosetParser
Returns:
The string interning property.

setBufferSize

public void setBufferSize(int bufferSize)
Set the buffer size.

The size of the buffer for parsing is set using this method. Requests for sizes smaller then the current size will be ignored. Otherwise the buffer will be resized when the next parse is performed.

Specified by:
setBufferSize in interface FastInfosetParser
Parameters:
bufferSize - The requested buffer size.

getBufferSize

public int getBufferSize()
Get the buffer size.

Specified by:
getBufferSize in interface FastInfosetParser
Returns:
The buffer size.

setRegisteredEncodingAlgorithms

public void setRegisteredEncodingAlgorithms(java.util.Map algorithms)
Sets the set of registered encoding algorithms.

Specified by:
setRegisteredEncodingAlgorithms in interface FastInfosetParser
Parameters:
algorithms - The set of registered algorithms.

getRegisteredEncodingAlgorithms

public java.util.Map getRegisteredEncodingAlgorithms()
Gets the set of registered encoding algorithms.

Specified by:
getRegisteredEncodingAlgorithms in interface FastInfosetParser
Returns:
The set of registered algorithms.

setExternalVocabularies

public void setExternalVocabularies(java.util.Map referencedVocabualries)
Set the map of referenced external vocabularies.

The map (but not the keys and values) be cloned.

Specified by:
setExternalVocabularies in interface FastInfosetParser
Parameters:
referencedVocabualries - the map of URI to vocabulary.

getExternalVocabularies

public java.util.Map getExternalVocabularies()
Get the map of referenced external vocabularies.

Specified by:
getExternalVocabularies in interface FastInfosetParser
Returns:
the map of URI to vocabulary.

setParseFragments

public void setParseFragments(boolean parseFragments)
Set the parse fragments property.

If the parse fragments property is set to true then then fragments of an XML infoset may be parsed.

Specified by:
setParseFragments in interface FastInfosetParser
Parameters:
parseFragments - The parse fragments property.

getParseFragments

public boolean getParseFragments()
Return the parse fragments property.

Specified by:
getParseFragments in interface FastInfosetParser
Returns:
The parse fragments property.

reset

public void reset()
Reset the decoder for reuse decoding another XML infoset.


setVocabulary

public void setVocabulary(ParserVocabulary v)
Set the ParserVocabulary to be used for decoding.

Parameters:
v - the vocabulary to be used for decoding.

setInputStream

public void setInputStream(java.io.InputStream s)
Set the InputStream to decode the fast infoset document.

Parameters:
s - the InputStream where the fast infoset document is decoded from.

decodeDII

protected final void decodeDII()
                        throws FastInfosetException,
                               java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeAdditionalData

protected final void decodeAdditionalData()
                                   throws FastInfosetException,
                                          java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeInitialVocabulary

protected final void decodeInitialVocabulary()
                                      throws FastInfosetException,
                                             java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeNotations

protected final void decodeNotations()
                              throws FastInfosetException,
                                     java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeUnparsedEntities

protected final void decodeUnparsedEntities()
                                     throws FastInfosetException,
                                            java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeCharacterEncodingScheme

protected final java.lang.String decodeCharacterEncodingScheme()
                                                        throws FastInfosetException,
                                                               java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeVersion

protected final java.lang.String decodeVersion()
                                        throws FastInfosetException,
                                               java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeEIIIndexMedium

protected final QualifiedName decodeEIIIndexMedium()
                                            throws FastInfosetException,
                                                   java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeEIIIndexLarge

protected final QualifiedName decodeEIIIndexLarge()
                                           throws FastInfosetException,
                                                  java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeLiteralQualifiedName

protected final QualifiedName decodeLiteralQualifiedName(int state,
                                                         QualifiedName q)
                                                  throws FastInfosetException,
                                                         java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeNonIdentifyingStringOnFirstBit

protected final int decodeNonIdentifyingStringOnFirstBit()
                                                  throws FastInfosetException,
                                                         java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeOctetsOnFifthBitOfNonIdentifyingStringOnFirstBit

protected final void decodeOctetsOnFifthBitOfNonIdentifyingStringOnFirstBit(int b)
                                                                     throws FastInfosetException,
                                                                            java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeOctetsOnSeventhBitOfNonIdentifyingStringOnThirdBit

protected final void decodeOctetsOnSeventhBitOfNonIdentifyingStringOnThirdBit(int b)
                                                                       throws FastInfosetException,
                                                                              java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeIdentifyingNonEmptyStringOnFirstBit

protected final java.lang.String decodeIdentifyingNonEmptyStringOnFirstBit(StringArray table)
                                                                    throws FastInfosetException,
                                                                           java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeIdentifyingNonEmptyStringOnFirstBitAsPrefix

protected final java.lang.String decodeIdentifyingNonEmptyStringOnFirstBitAsPrefix(boolean namespaceNamePresent)
                                                                            throws FastInfosetException,
                                                                                   java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeIdentifyingNonEmptyStringIndexOnFirstBitAsPrefix

protected final java.lang.String decodeIdentifyingNonEmptyStringIndexOnFirstBitAsPrefix(boolean namespaceNamePresent)
                                                                                 throws FastInfosetException,
                                                                                        java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeIdentifyingNonEmptyStringOnFirstBitAsNamespaceName

protected final java.lang.String decodeIdentifyingNonEmptyStringOnFirstBitAsNamespaceName(boolean prefixPresent)
                                                                                   throws FastInfosetException,
                                                                                          java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeIdentifyingNonEmptyStringIndexOnFirstBitAsNamespaceName

protected final java.lang.String decodeIdentifyingNonEmptyStringIndexOnFirstBitAsNamespaceName(boolean prefixPresent)
                                                                                        throws FastInfosetException,
                                                                                               java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeNonEmptyOctetStringOnSecondBitAsUtf8String

protected final java.lang.String decodeNonEmptyOctetStringOnSecondBitAsUtf8String()
                                                                           throws FastInfosetException,
                                                                                  java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeNonEmptyOctetStringOnSecondBitAsUtf8CharArray

protected final void decodeNonEmptyOctetStringOnSecondBitAsUtf8CharArray()
                                                                  throws FastInfosetException,
                                                                         java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeNonEmptyOctetStringLengthOnSecondBit

protected final void decodeNonEmptyOctetStringLengthOnSecondBit()
                                                         throws FastInfosetException,
                                                                java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeIntegerIndexOnSecondBit

protected final int decodeIntegerIndexOnSecondBit()
                                           throws FastInfosetException,
                                                  java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeHeader

protected final void decodeHeader()
                           throws FastInfosetException,
                                  java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeRestrictedAlphabetAsCharBuffer

protected final void decodeRestrictedAlphabetAsCharBuffer()
                                                   throws FastInfosetException,
                                                          java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeRestrictedAlphabetAsString

protected final java.lang.String decodeRestrictedAlphabetAsString()
                                                           throws FastInfosetException,
                                                                  java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeRAOctetsAsString

protected final java.lang.String decodeRAOctetsAsString(char[] restrictedAlphabet)
                                                 throws FastInfosetException,
                                                        java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeFourBitAlphabetOctetsAsCharBuffer

protected final void decodeFourBitAlphabetOctetsAsCharBuffer(char[] restrictedAlphabet)
                                                      throws FastInfosetException,
                                                             java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeAlphabetOctetsAsCharBuffer

protected final void decodeAlphabetOctetsAsCharBuffer(char[] restrictedAlphabet)
                                               throws FastInfosetException,
                                                      java.io.IOException
Throws:
FastInfosetException
java.io.IOException

decodeUtf8StringAsCharBuffer

protected final void decodeUtf8StringAsCharBuffer()
                                           throws java.io.IOException
Throws:
java.io.IOException

decodeUtf8StringAsCharBuffer

protected final void decodeUtf8StringAsCharBuffer(char[] ch,
                                                  int offset)
                                           throws java.io.IOException
Throws:
java.io.IOException

decodeUtf8StringAsString

protected final java.lang.String decodeUtf8StringAsString()
                                                   throws java.io.IOException
Throws:
java.io.IOException

decodeUtf16StringAsCharBuffer

protected final void decodeUtf16StringAsCharBuffer()
                                            throws java.io.IOException
Throws:
java.io.IOException

decodeUtf16StringAsString

protected final java.lang.String decodeUtf16StringAsString()
                                                    throws java.io.IOException
Throws:
java.io.IOException

decodeUtf8StringIntoCharBuffer

protected final void decodeUtf8StringIntoCharBuffer()
                                             throws java.io.IOException
Throws:
java.io.IOException

decodeUtf8StringIntoCharBuffer

protected final void decodeUtf8StringIntoCharBuffer(char[] ch,
                                                    int offset)
                                             throws java.io.IOException
Throws:
java.io.IOException

decodeUtf8NCNameIntoCharBuffer

protected final void decodeUtf8NCNameIntoCharBuffer()
                                             throws java.io.IOException
Throws:
java.io.IOException

createQualifiedNameString

protected java.lang.String createQualifiedNameString(char[] first,
                                                     java.lang.String second)

read

protected final int read()
                  throws java.io.IOException
Throws:
java.io.IOException

peek

protected final int peek()
                  throws java.io.IOException
Throws:
java.io.IOException

peek

protected final int peek(OctetBufferListener octetBufferListener)
                  throws java.io.IOException
Throws:
java.io.IOException

peek2

protected final int peek2(OctetBufferListener octetBufferListener)
                   throws java.io.IOException
Throws:
java.io.IOException

_isFastInfosetDocument

protected final boolean _isFastInfosetDocument()
                                        throws java.io.IOException
Throws:
java.io.IOException

isFastInfosetDocument

public static boolean isFastInfosetDocument(java.io.InputStream s)
                                     throws java.io.IOException
Throws:
java.io.IOException