1 /*
   2  * reserved comment block
   3  * DO NOT REMOVE OR ALTER!
   4  */
   5 /*
   6  * Copyright 1999-2004 The Apache Software Foundation.
   7  *
   8  * Licensed under the Apache License, Version 2.0 (the "License");
   9  * you may not use this file except in compliance with the License.
  10  * You may obtain a copy of the License at
  11  *
  12  *      http://www.apache.org/licenses/LICENSE-2.0
  13  *
  14  * Unless required by applicable law or agreed to in writing, software
  15  * distributed under the License is distributed on an "AS IS" BASIS,
  16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17  * See the License for the specific language governing permissions and
  18  * limitations under the License.
  19  */
  20 
  21 package com.sun.org.apache.xerces.internal.parsers;
  22 
  23 import java.io.IOException;
  24 
  25 import com.sun.org.apache.xerces.internal.impl.Constants;
  26 import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager;
  27 import com.sun.org.apache.xerces.internal.utils.XMLSecurityPropertyManager;
  28 import com.sun.org.apache.xerces.internal.xni.XNIException;
  29 import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
  30 import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
  31 
  32 import org.xml.sax.SAXNotSupportedException;
  33 import org.xml.sax.SAXNotRecognizedException;
  34 
  35 /**
  36  * Base class of all XML-related parsers.
  37  * <p>
  38  * In addition to the features and properties recognized by the parser
  39  * configuration, this parser recognizes these additional features and
  40  * properties:
  41  * <ul>
  42  * <li>Properties
  43  *  <ul>
  44  *   <li>http://apache.org/xml/properties/internal/error-handler</li>
  45  *   <li>http://apache.org/xml/properties/internal/entity-resolver</li>
  46  *  </ul>
  47  * </ul>
  48  *
  49  * @author Arnaud  Le Hors, IBM
  50  * @author Andy Clark, IBM
  51  *
  52  */
  53 public abstract class XMLParser {
  54 
  55     //
  56     // Constants
  57     //
  58 
  59     // properties
  60 
  61     /** Property identifier: entity resolver. */
  62     protected static final String ENTITY_RESOLVER =
  63         Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_RESOLVER_PROPERTY;
  64 
  65     /** Property identifier: error handler. */
  66     protected static final String ERROR_HANDLER =
  67         Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_HANDLER_PROPERTY;
  68 
  69     /** Recognized properties. */
  70     private static final String[] RECOGNIZED_PROPERTIES = {
  71         ENTITY_RESOLVER,
  72         ERROR_HANDLER,
  73     };
  74 
  75     //
  76     // Data
  77     //
  78 
  79     /** The parser configuration. */
  80     protected XMLParserConfiguration fConfiguration;
  81 
  82     /** The XML Security Manager. */
  83     XMLSecurityManager securityManager;
  84 
  85     /** The XML Security Property Manager. */
  86     XMLSecurityPropertyManager securityPropertyManager;
  87 
  88 
  89     //
  90     // Constructors
  91     //
  92 
  93     /**
  94      * Query the state of a feature.
  95      */
  96     public boolean getFeature(String featureId)
  97             throws SAXNotSupportedException, SAXNotRecognizedException {
  98         return fConfiguration.getFeature(featureId);
  99 
 100     }
 101 
 102     /**
 103      * Default Constructor.
 104      */
 105     protected XMLParser(XMLParserConfiguration config) {
 106 
 107         // save configuration
 108         fConfiguration = config;
 109 
 110         // add default recognized properties
 111         fConfiguration.addRecognizedProperties(RECOGNIZED_PROPERTIES);
 112 
 113     } // <init>(XMLParserConfiguration)
 114 
 115     //
 116     // Public methods
 117     //
 118 
 119     /**
 120      * parse
 121      *
 122      * @param inputSource
 123      *
 124      * @exception XNIException
 125      * @exception java.io.IOException
 126      */
 127     public void parse(XMLInputSource inputSource)
 128         throws XNIException, IOException {
 129         // null indicates that the parser is called directly, initialize them
 130         if (securityManager == null) {
 131             securityManager = new XMLSecurityManager(true);
 132             fConfiguration.setProperty(Constants.SECURITY_MANAGER, securityManager);
 133         }
 134         if (securityPropertyManager == null) {
 135             securityPropertyManager = new XMLSecurityPropertyManager();
 136             fConfiguration.setProperty(Constants.XML_SECURITY_PROPERTY_MANAGER, securityPropertyManager);
 137         }
 138 
 139         reset();
 140         fConfiguration.parse(inputSource);
 141 
 142     } // parse(XMLInputSource)
 143 
 144     //
 145     // Protected methods
 146     //
 147 
 148     /**
 149      * reset all components before parsing
 150      */
 151     protected void reset() throws XNIException {
 152     } // reset()
 153 
 154 } // class XMLParser