InputSource.hpp
上传用户:huihehuasu
上传日期:2007-01-10
资源大小:6948k
文件大小:13k
源码类别:

xml/soap/webservice

开发平台:

C/C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  5.  * reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  *
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  *
  19.  * 3. The end-user documentation included with the redistribution,
  20.  *    if any, must include the following acknowledgment:
  21.  *       "This product includes software developed by the
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowledgment may appear in the software itself,
  24.  *    if and wherever such third-party acknowledgments normally appear.
  25.  *
  26.  * 4. The names "Xerces" and "Apache Software Foundation" must
  27.  *    not be used to endorse or promote products derived from this
  28.  *    software without prior written permission. For written
  29.  *    permission, please contact apache@apache.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "Apache",
  32.  *    nor may "Apache" appear in their name, without prior written
  33.  *    permission of the Apache Software Foundation.
  34.  *
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  *
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation, and was
  51.  * originally based on software copyright (c) 1999, International
  52.  * Business Machines, Inc., http://www.ibm.com .  For more information
  53.  * on the Apache Software Foundation, please see
  54.  * <http://www.apache.org/>.
  55.  */
  56. /*
  57.  * $Log: InputSource.hpp,v $
  58.  * Revision 1.10  2001/11/21 16:14:32  tng
  59.  * Schema: New method InputSource::get/setIssueFatalErrorIfNotFound to tell the parser whether to issue fatal error or not if cannot find it (the InputSource).  This is required for schema processing as it shouldn't be a fatal error if the schema is not found.
  60.  *
  61.  * Revision 1.9  2000/03/02 19:54:35  roddey
  62.  * This checkin includes many changes done while waiting for the
  63.  * 1.1.0 code to be finished. I can't list them all here, but a list is
  64.  * available elsewhere.
  65.  *
  66.  * Revision 1.8  2000/02/24 20:12:55  abagchi
  67.  * Swat for removing Log from API docs
  68.  *
  69.  * Revision 1.7  2000/02/12 03:42:21  rahulj
  70.  * Fixed DOC++ documentation formatting errors.
  71.  *
  72.  * Revision 1.6  2000/02/12 03:31:55  rahulj
  73.  * Removed duplicate CVS Log entries.
  74.  *
  75.  * Revision 1.5  2000/02/12 01:27:19  aruna1
  76.  * Documentation updated
  77.  *
  78.  * Revision 1.4  2000/02/09 02:15:28  abagchi
  79.  * Documented destructor
  80.  *
  81.  * Revision 1.3  2000/02/06 07:47:58  rahulj
  82.  * Year 2K copyright swat.
  83.  *
  84.  * Revision 1.2  2000/01/12 00:15:39  roddey
  85.  * Changes to deal with multiply nested, relative pathed, entities and to deal
  86.  * with the new URL class changes.
  87.  *
  88.  * Revision 1.1.1.1  1999/11/09 01:07:46  twl
  89.  * Initial checkin
  90.  *
  91.  * Revision 1.2  1999/11/08 20:45:01  rahul
  92.  * Swat for adding in Product name and CVS comment log variable.
  93.  *
  94.  */
  95. #ifndef INPUTSOURCE_HPP
  96. #define INPUTSOURCE_HPP
  97. #include <util/XercesDefs.hpp>
  98. class BinInputStream;
  99. /**
  100.   * A single input source for an XML entity.
  101.   *
  102.   * <p>This class encapsulates information about an input source in a
  103.   * single object, which may include a public identifier or a system
  104.   * identifier</p>
  105.   *
  106.   * <p>There are two places that the application will deliver this input
  107.   * source to the parser: as the argument to the Parser::parse method, or as
  108.   * the return value of the EntityResolver::resolveEntity method.</p>
  109.   *
  110.   * <p>InputSource is never used directly, but is the base class for a number
  111.   * of derived classes for particular types of input sources. Derivatives are
  112.   * provided (in the internal/ directory) for URL input sources, memory buffer
  113.   * input sources, and so on.</p>
  114.   *
  115.   * <p>When it is time to parse the input described by an input source, it
  116.   * will be asked to create a binary stream for that source. That stream will
  117.   * be used to input the data of the source. The derived class provides the
  118.   * implementation of the makeStream() method, and provides a type of stream
  119.   * of the correct type for the input source it represents.
  120.   *
  121.   * <p>An InputSource object belongs to the application: the parser never
  122.   * modifies them in any way. They are always passed by const reference so
  123.   * the parser will make a copy of any input sources that it must keep
  124.   * around beyond the call.</p>
  125.   *
  126.   * @see Parser#parse
  127.   * @see EntityResolver#resolveEntity
  128.   */
  129. class SAX_EXPORT InputSource
  130. {
  131. public:
  132.     // -----------------------------------------------------------------------
  133.     //  All constructors are hidden, just the destructor is available
  134.     // -----------------------------------------------------------------------
  135.     /** @name Destructor */
  136.     //@{
  137.   /**
  138.     * Destructor
  139.     *
  140.     */
  141.     virtual ~InputSource();
  142.     //@}
  143.     // -----------------------------------------------------------------------
  144.     /** @name Virtual input source interface */
  145.     //@{
  146.   /**
  147.     * Makes the byte stream for this input source.
  148.     *
  149.     * <p>The derived class must create and return a binary input stream of an
  150.     * appropriate type for its kind of data source. The returned stream must
  151.     * be dynamically allocated and becomes the parser's property.
  152.     * </p>
  153.     *
  154.     * @see BinInputStream
  155.     */
  156.     virtual BinInputStream* makeStream() const = 0;
  157.     //@}
  158.     // -----------------------------------------------------------------------
  159.     /** @name Getter methods */
  160.     //@{
  161.   /**
  162.     * An input source can be set to force the parser to assume a particular
  163.     * encoding for the data that input source reprsents, via the setEncoding()
  164.     * method. This method returns name of the encoding that is to be forced.
  165.     * If the encoding has never been forced, it returns a null pointer.
  166.     *
  167.     * @return The forced encoding, or null if none was supplied.
  168.     * @see #setEncoding
  169.     */
  170.     const XMLCh* getEncoding() const;
  171.   /**
  172.     * Get the public identifier for this input source.
  173.     *
  174.     * @return The public identifier, or null if none was supplied.
  175.     * @see #setPublicId
  176.     */
  177.     const XMLCh* getPublicId() const;
  178.   /**
  179.     * Get the system identifier for this input source.
  180.     *
  181.     * <p>If the system ID is a URL, it will be fully resolved.</p>
  182.     *
  183.     * @return The system identifier.
  184.     * @see #setSystemId
  185.     */
  186.     const XMLCh* getSystemId() const;
  187.   /**
  188.     * Get the flag that indicates if the parser should issue fatal error if this input source
  189.     * is not found.
  190.     *
  191.     * @return True if the parser should issue fatal error if this input source is not found.
  192.     *         False if the parser issue warning message instead.
  193.     * @see #setIssueFatalErrorIfNotFound
  194.     */
  195.     const bool getIssueFatalErrorIfNotFound() const;
  196.     //@}
  197.     // -----------------------------------------------------------------------
  198.     /** @name Setter methods */
  199.     //@{
  200.   /**
  201.     * Set the encoding which will be required for use with the XML text read
  202.     * via a stream opened by this input source.
  203.     *
  204.     * <p>This is usually not set, allowing the encoding to be sensed in the
  205.     * usual XML way. However, in some cases, the encoding in the file is known
  206.     * to be incorrect because of intermediate transcoding, for instance
  207.     * encapsulation within a MIME document.
  208.     *
  209.     * @param encodingStr The name of the encoding to force.
  210.     */
  211.     void setEncoding(const XMLCh* const encodingStr);
  212.   /**
  213.     * Set the public identifier for this input source.
  214.     *
  215.     * <p>The public identifier is always optional: if the application writer
  216.     * includes one, it will be provided as part of the location information.</p>
  217.     *
  218.     * @param publicId The public identifier as a string.
  219.     * @see Locator#getPublicId
  220.     * @see SAXParseException#getPublicId
  221.     * @see #getPublicId
  222.     */
  223.     void setPublicId(const XMLCh* const publicId);
  224.   /**
  225.     * Set the system identifier for this input source.
  226.     *
  227.     * <p>Set the system identifier for this input source.
  228.     *
  229.     * </p>The system id is always required. The public id may be used to map
  230.     * to another system id, but the system id must always be present as a fall
  231.     * back.
  232.     *
  233.     * <p>If the system ID is a URL, it must be fully resolved.</p>
  234.     *
  235.     * @param systemId The system identifier as a string.
  236.     * @see #getSystemId
  237.     * @see Locator#getSystemId
  238.     * @see SAXParseException#getSystemId
  239.     */
  240.     void setSystemId(const XMLCh* const systemId);
  241.   /**
  242.     * Indicates if the parser should issue fatal error if this input source
  243.     * is not found.  If set to false, the parser issue warning message instead.
  244.     *
  245.     * @param  True if the parser should issue fatal error if this input source is not found.
  246.     *         If set to false, the parser issue warning message instead.  (Default: true)
  247.     *
  248.     * @see #getIssueFatalErrorIfNotFound
  249.     */
  250.     void setIssueFatalErrorIfNotFound(const bool flag);
  251.     //@}
  252. protected :
  253.     // -----------------------------------------------------------------------
  254.     //  Hidden constructors
  255.     // -----------------------------------------------------------------------
  256.     /** @name Constructors and Destructor */
  257.     //@{
  258.     /** Default constructor */
  259.     InputSource();
  260.     /** Constructor with a system identifier as XMLCh type.
  261.       * @param systemId The system identifier (URI).
  262.       */
  263.     InputSource(const XMLCh* const systemId);
  264.     /** Constructor with a system and public identifiers
  265.       * @param systemId The system identifier (URI).
  266.       * @param publicId The public identifier as in the entity definition.
  267.       */
  268.     InputSource
  269.     (
  270.         const   XMLCh* const    systemId
  271.         , const XMLCh* const    publicId
  272.     );
  273.     /** Constructor witha system identifier as string
  274.       * @param systemId The system identifier (URI).
  275.       */
  276.     InputSource(const char* const systemId);
  277.     /** Constructor witha system and public identifiers. Both as string
  278.       * @param systemId The system identifier (URI).
  279.       * @param publicId The public identifier as in the entity definition.
  280.       */
  281.     InputSource
  282.     (
  283.         const   char* const systemId
  284.         , const char* const publicId
  285.     );
  286.     //@}
  287. private:
  288.     // -----------------------------------------------------------------------
  289.     //  Unimplemented constructors and operators
  290.     // -----------------------------------------------------------------------
  291.     InputSource(const InputSource&);
  292.     void operator=(const InputSource&);
  293.     // -----------------------------------------------------------------------
  294.     //  Private data members
  295.     //
  296.     //  fEncoding
  297.     //      This is the encoding to use. Usually this is null, which means
  298.     //      to use the information found in the file itself. But, if set,
  299.     //      this encoding will be used without question.
  300.     //
  301.     //  fPublicId
  302.     //      This is the optional public id for the input source. It can be
  303.     //      null if none is desired.
  304.     //
  305.     //  fSystemId
  306.     //      This is the system id for the input source. This is what is
  307.     //      actually used to open the source.
  308.     //
  309.     //  fFatalErrorIfNotFound
  310.     // -----------------------------------------------------------------------
  311.     XMLCh*  fEncoding;
  312.     XMLCh*  fPublicId;
  313.     XMLCh*  fSystemId;
  314.     bool    fFatalErrorIfNotFound;
  315. };
  316. // ---------------------------------------------------------------------------
  317. //  InputSource: Getter methods
  318. // ---------------------------------------------------------------------------
  319. inline const XMLCh* InputSource::getEncoding() const
  320. {
  321.     return fEncoding;
  322. }
  323. inline const XMLCh* InputSource::getPublicId() const
  324. {
  325.     return fPublicId;
  326. }
  327. inline const XMLCh* InputSource::getSystemId() const
  328. {
  329.     return fSystemId;
  330. }
  331. inline const bool InputSource::getIssueFatalErrorIfNotFound() const
  332. {
  333.     return fFatalErrorIfNotFound;
  334. }
  335. // ---------------------------------------------------------------------------
  336. //  InputSource: Setter methods
  337. // ---------------------------------------------------------------------------
  338. inline void InputSource::setIssueFatalErrorIfNotFound(const bool flag)
  339. {
  340.     fFatalErrorIfNotFound = flag;
  341. }
  342. #endif