Save This Page
Home » openjdk-7 » org.xml » sax » [javadoc | source]
    1   /*
    2    * Copyright 2000-2005 Sun Microsystems, Inc.  All Rights Reserved.
    3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    4    *
    5    * This code is free software; you can redistribute it and/or modify it
    6    * under the terms of the GNU General Public License version 2 only, as
    7    * published by the Free Software Foundation.  Sun designates this
    8    * particular file as subject to the "Classpath" exception as provided
    9    * by Sun in the LICENSE file that accompanied this code.
   10    *
   11    * This code is distributed in the hope that it will be useful, but WITHOUT
   12    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13    * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14    * version 2 for more details (a copy is included in the LICENSE file that
   15    * accompanied this code).
   16    *
   17    * You should have received a copy of the GNU General Public License version
   18    * 2 along with this work; if not, write to the Free Software Foundation,
   19    * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20    *
   21    * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
   22    * CA 95054 USA or visit www.sun.com if you need additional information or
   23    * have any questions.
   24    */
   25   
   26   // SAX input source.
   27   // http://www.saxproject.org
   28   // No warranty; no copyright -- use this as you will.
   29   // $Id: InputSource.java,v 1.2 2004/11/03 22:55:32 jsuttor Exp $
   30   
   31   package org.xml.sax;
   32   
   33   import java.io.Reader;
   34   import java.io.InputStream;
   35   
   36   /**
   37    * A single input source for an XML entity.
   38    *
   39    * <blockquote>
   40    * <em>This module, both source code and documentation, is in the
   41    * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
   42    * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
   43    * for further information.
   44    * </blockquote>
   45    *
   46    * <p>This class allows a SAX application to encapsulate information
   47    * about an input source in a single object, which may include
   48    * a public identifier, a system identifier, a byte stream (possibly
   49    * with a specified encoding), and/or a character stream.</p>
   50    *
   51    * <p>There are two places that the application can deliver an
   52    * input source to the parser: as the argument to the Parser.parse
   53    * method, or as the return value of the EntityResolver.resolveEntity
   54    * method.</p>
   55    *
   56    * <p>The SAX parser will use the InputSource object to determine how
   57    * to read XML input.  If there is a character stream available, the
   58    * parser will read that stream directly, disregarding any text
   59    * encoding declaration found in that stream.
   60    * If there is no character stream, but there is
   61    * a byte stream, the parser will use that byte stream, using the
   62    * encoding specified in the InputSource or else (if no encoding is
   63    * specified) autodetecting the character encoding using an algorithm
   64    * such as the one in the XML specification.  If neither a character
   65    * stream nor a
   66    * byte stream is available, the parser will attempt to open a URI
   67    * connection to the resource identified by the system
   68    * identifier.</p>
   69    *
   70    * <p>An InputSource object belongs to the application: the SAX parser
   71    * shall never modify it in any way (it may modify a copy if
   72    * necessary).  However, standard processing of both byte and
   73    * character streams is to close them on as part of end-of-parse cleanup,
   74    * so applications should not attempt to re-use such streams after they
   75    * have been handed to a parser.  </p>
   76    *
   77    * @since SAX 1.0
   78    * @author David Megginson
   79    * @see org.xml.sax.XMLReader#parse(org.xml.sax.InputSource)
   80    * @see org.xml.sax.EntityResolver#resolveEntity
   81    * @see java.io.InputStream
   82    * @see java.io.Reader
   83    */
   84   public class InputSource {
   85   
   86       /**
   87        * Zero-argument default constructor.
   88        *
   89        * @see #setPublicId
   90        * @see #setSystemId
   91        * @see #setByteStream
   92        * @see #setCharacterStream
   93        * @see #setEncoding
   94        */
   95       public InputSource ()
   96       {
   97       }
   98   
   99   
  100       /**
  101        * Create a new input source with a system identifier.
  102        *
  103        * <p>Applications may use setPublicId to include a
  104        * public identifier as well, or setEncoding to specify
  105        * the character encoding, if known.</p>
  106        *
  107        * <p>If the system identifier is a URL, it must be fully
  108        * resolved (it may not be a relative URL).</p>
  109        *
  110        * @param systemId The system identifier (URI).
  111        * @see #setPublicId
  112        * @see #setSystemId
  113        * @see #setByteStream
  114        * @see #setEncoding
  115        * @see #setCharacterStream
  116        */
  117       public InputSource (String systemId)
  118       {
  119           setSystemId(systemId);
  120       }
  121   
  122   
  123       /**
  124        * Create a new input source with a byte stream.
  125        *
  126        * <p>Application writers should use setSystemId() to provide a base
  127        * for resolving relative URIs, may use setPublicId to include a
  128        * public identifier, and may use setEncoding to specify the object's
  129        * character encoding.</p>
  130        *
  131        * @param byteStream The raw byte stream containing the document.
  132        * @see #setPublicId
  133        * @see #setSystemId
  134        * @see #setEncoding
  135        * @see #setByteStream
  136        * @see #setCharacterStream
  137        */
  138       public InputSource (InputStream byteStream)
  139       {
  140           setByteStream(byteStream);
  141       }
  142   
  143   
  144       /**
  145        * Create a new input source with a character stream.
  146        *
  147        * <p>Application writers should use setSystemId() to provide a base
  148        * for resolving relative URIs, and may use setPublicId to include a
  149        * public identifier.</p>
  150        *
  151        * <p>The character stream shall not include a byte order mark.</p>
  152        *
  153        * @see #setPublicId
  154        * @see #setSystemId
  155        * @see #setByteStream
  156        * @see #setCharacterStream
  157        */
  158       public InputSource (Reader characterStream)
  159       {
  160           setCharacterStream(characterStream);
  161       }
  162   
  163   
  164       /**
  165        * Set the public identifier for this input source.
  166        *
  167        * <p>The public identifier is always optional: if the application
  168        * writer includes one, it will be provided as part of the
  169        * location information.</p>
  170        *
  171        * @param publicId The public identifier as a string.
  172        * @see #getPublicId
  173        * @see org.xml.sax.Locator#getPublicId
  174        * @see org.xml.sax.SAXParseException#getPublicId
  175        */
  176       public void setPublicId (String publicId)
  177       {
  178           this.publicId = publicId;
  179       }
  180   
  181   
  182       /**
  183        * Get the public identifier for this input source.
  184        *
  185        * @return The public identifier, or null if none was supplied.
  186        * @see #setPublicId
  187        */
  188       public String getPublicId ()
  189       {
  190           return publicId;
  191       }
  192   
  193   
  194       /**
  195        * Set the system identifier for this input source.
  196        *
  197        * <p>The system identifier is optional if there is a byte stream
  198        * or a character stream, but it is still useful to provide one,
  199        * since the application can use it to resolve relative URIs
  200        * and can include it in error messages and warnings (the parser
  201        * will attempt to open a connection to the URI only if
  202        * there is no byte stream or character stream specified).</p>
  203        *
  204        * <p>If the application knows the character encoding of the
  205        * object pointed to by the system identifier, it can register
  206        * the encoding using the setEncoding method.</p>
  207        *
  208        * <p>If the system identifier is a URL, it must be fully
  209        * resolved (it may not be a relative URL).</p>
  210        *
  211        * @param systemId The system identifier as a string.
  212        * @see #setEncoding
  213        * @see #getSystemId
  214        * @see org.xml.sax.Locator#getSystemId
  215        * @see org.xml.sax.SAXParseException#getSystemId
  216        */
  217       public void setSystemId (String systemId)
  218       {
  219           this.systemId = systemId;
  220       }
  221   
  222   
  223       /**
  224        * Get the system identifier for this input source.
  225        *
  226        * <p>The getEncoding method will return the character encoding
  227        * of the object pointed to, or null if unknown.</p>
  228        *
  229        * <p>If the system ID is a URL, it will be fully resolved.</p>
  230        *
  231        * @return The system identifier, or null if none was supplied.
  232        * @see #setSystemId
  233        * @see #getEncoding
  234        */
  235       public String getSystemId ()
  236       {
  237           return systemId;
  238       }
  239   
  240   
  241       /**
  242        * Set the byte stream for this input source.
  243        *
  244        * <p>The SAX parser will ignore this if there is also a character
  245        * stream specified, but it will use a byte stream in preference
  246        * to opening a URI connection itself.</p>
  247        *
  248        * <p>If the application knows the character encoding of the
  249        * byte stream, it should set it with the setEncoding method.</p>
  250        *
  251        * @param byteStream A byte stream containing an XML document or
  252        *        other entity.
  253        * @see #setEncoding
  254        * @see #getByteStream
  255        * @see #getEncoding
  256        * @see java.io.InputStream
  257        */
  258       public void setByteStream (InputStream byteStream)
  259       {
  260           this.byteStream = byteStream;
  261       }
  262   
  263   
  264       /**
  265        * Get the byte stream for this input source.
  266        *
  267        * <p>The getEncoding method will return the character
  268        * encoding for this byte stream, or null if unknown.</p>
  269        *
  270        * @return The byte stream, or null if none was supplied.
  271        * @see #getEncoding
  272        * @see #setByteStream
  273        */
  274       public InputStream getByteStream ()
  275       {
  276           return byteStream;
  277       }
  278   
  279   
  280       /**
  281        * Set the character encoding, if known.
  282        *
  283        * <p>The encoding must be a string acceptable for an
  284        * XML encoding declaration (see section 4.3.3 of the XML 1.0
  285        * recommendation).</p>
  286        *
  287        * <p>This method has no effect when the application provides a
  288        * character stream.</p>
  289        *
  290        * @param encoding A string describing the character encoding.
  291        * @see #setSystemId
  292        * @see #setByteStream
  293        * @see #getEncoding
  294        */
  295       public void setEncoding (String encoding)
  296       {
  297           this.encoding = encoding;
  298       }
  299   
  300   
  301       /**
  302        * Get the character encoding for a byte stream or URI.
  303        * This value will be ignored when the application provides a
  304        * character stream.
  305        *
  306        * @return The encoding, or null if none was supplied.
  307        * @see #setByteStream
  308        * @see #getSystemId
  309        * @see #getByteStream
  310        */
  311       public String getEncoding ()
  312       {
  313           return encoding;
  314       }
  315   
  316   
  317       /**
  318        * Set the character stream for this input source.
  319        *
  320        * <p>If there is a character stream specified, the SAX parser
  321        * will ignore any byte stream and will not attempt to open
  322        * a URI connection to the system identifier.</p>
  323        *
  324        * @param characterStream The character stream containing the
  325        *        XML document or other entity.
  326        * @see #getCharacterStream
  327        * @see java.io.Reader
  328        */
  329       public void setCharacterStream (Reader characterStream)
  330       {
  331           this.characterStream = characterStream;
  332       }
  333   
  334   
  335       /**
  336        * Get the character stream for this input source.
  337        *
  338        * @return The character stream, or null if none was supplied.
  339        * @see #setCharacterStream
  340        */
  341       public Reader getCharacterStream ()
  342       {
  343           return characterStream;
  344       }
  345   
  346   
  347   
  348       ////////////////////////////////////////////////////////////////////
  349       // Internal state.
  350       ////////////////////////////////////////////////////////////////////
  351   
  352       private String publicId;
  353       private String systemId;
  354       private InputStream byteStream;
  355       private String encoding;
  356       private Reader characterStream;
  357   
  358   }
  359   
  360   // end of InputSource.java

Save This Page
Home » openjdk-7 » org.xml » sax » [javadoc | source]