Class XIncludeTextReader

java.lang.Object
org.apache.xerces.xinclude.XIncludeTextReader
Direct Known Subclasses:
XInclude11TextReader

public class XIncludeTextReader extends Object
This class is used for reading resources requested in <include> elements, when the parse attribute of the <include> element is "text". Using this class will open the location, detect the encoding, and discard the byte order mark, if applicable. REVISIT: Much of the code in this class is taken from XMLEntityManager. It would be nice if this code could be shared in some way. However, since XMLEntityManager is used for reading files as XML, and this needs to read files as text, there would need to be some refactoring done.
Version:
$Id: XIncludeTextReader.java 1478179 2013-05-01 20:39:04Z mrglavas $
Author:
Michael Glavassevich, IBM, Peter McCracken, IBM, Ankit Pasricha, IBM, Arun Yadav, Sun Microsystems Inc.
See Also:
  • Constructor Summary

    Constructors
    Constructor
    Description
    XIncludeTextReader(org.apache.xerces.xni.parser.XMLInputSource source, XIncludeHandler handler, int bufferSize)
    Construct the XIncludeReader using the XMLInputSource and XIncludeHandler.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Closes the stream.
    protected String
    consumeBOM(InputStream stream, String encoding)
    Removes the byte order mark from the stream, if it exists and returns the encoding name.
    protected String
    getEncodingName(byte[] b4)
    REVISIT: This code is taken from org.apache.xerces.impl.XMLEntityManager.
    protected String
    XMLEntityManager cares about endian-ness, since it creates its own optimized readers.
    protected Reader
    getReader(org.apache.xerces.xni.parser.XMLInputSource source)
    Return the Reader for given XMLInputSource.
    protected boolean
    isValid(int ch)
    Returns true if the specified character is a valid XML character as per the rules of XML 1.0.
    void
    Read the input stream as text, and pass the text on to the XIncludeHandler using calls to characters().
    protected void
    setBufferSize(int bufferSize)
    Sets the buffer size property for the reader which decides the chunk sizes that are parsed by the reader at a time and passed to the handler
    void
    Sets the XMLErrorReporter used for reporting errors while reading the text include.
    void
    setInputSource(org.apache.xerces.xni.parser.XMLInputSource source)
    Sets the input source on this text reader.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • XIncludeTextReader

      public XIncludeTextReader(org.apache.xerces.xni.parser.XMLInputSource source, XIncludeHandler handler, int bufferSize) throws IOException
      Construct the XIncludeReader using the XMLInputSource and XIncludeHandler.
      Parameters:
      source - The XMLInputSource to use.
      handler - The XIncludeHandler to use.
      bufferSize - The size of this text reader's buffer.
      Throws:
      IOException
  • Method Details

    • setErrorReporter

      public void setErrorReporter(XMLErrorReporter errorReporter)
      Sets the XMLErrorReporter used for reporting errors while reading the text include.
      Parameters:
      errorReporter - the XMLErrorReporter to be used for reporting errors.
    • getReader

      protected Reader getReader(org.apache.xerces.xni.parser.XMLInputSource source) throws IOException
      Return the Reader for given XMLInputSource.
      Parameters:
      source - The XMLInputSource to use.
      Throws:
      IOException
    • getEncodingName

      protected String getEncodingName(InputStream stream) throws IOException
      XMLEntityManager cares about endian-ness, since it creates its own optimized readers. Since we're just using generic Java readers for now, we're not caring about endian-ness. If this changes, even more code needs to be copied from XMLEntity manager. -- PJM
      Throws:
      IOException
    • consumeBOM

      protected String consumeBOM(InputStream stream, String encoding) throws IOException
      Removes the byte order mark from the stream, if it exists and returns the encoding name.
      Parameters:
      stream -
      encoding -
      Throws:
      IOException
    • getEncodingName

      protected String getEncodingName(byte[] b4)
      REVISIT: This code is taken from org.apache.xerces.impl.XMLEntityManager. Is there any way we can share the code, without having it implemented twice? I think we should make it public and static in XMLEntityManager. --PJM Returns the IANA encoding name that is auto-detected from the bytes specified, with the endian-ness of that encoding where appropriate.
      Parameters:
      b4 - The first four bytes of the input.
      Returns:
      the encoding name, or null if no encoding could be detected
    • parse

      public void parse() throws IOException
      Read the input stream as text, and pass the text on to the XIncludeHandler using calls to characters(). This will read all of the text it can from the resource.
      Throws:
      IOException
    • setInputSource

      public void setInputSource(org.apache.xerces.xni.parser.XMLInputSource source)
      Sets the input source on this text reader.
      Parameters:
      source - The XMLInputSource to use.
    • close

      public void close() throws IOException
      Closes the stream. Call this after parse(), or when there is no longer any need for this object.
      Throws:
      IOException
    • isValid

      protected boolean isValid(int ch)
      Returns true if the specified character is a valid XML character as per the rules of XML 1.0.
      Parameters:
      ch - The character to check.
    • setBufferSize

      protected void setBufferSize(int bufferSize)
      Sets the buffer size property for the reader which decides the chunk sizes that are parsed by the reader at a time and passed to the handler
      Parameters:
      bufferSize - The size of the buffer desired