saxparserimpl.java
来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 432 行 · 第 1/2 页
JAVA
432 行
/* * * The Apache Software License, Version 1.1 * * * Copyright (c) 2000-2004 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Xerces" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 1999, Sun Microsystems, Inc., * http://www.sun.com. For more information on the Apache Software * Foundation, please see <http://www.apache.org/>. */package com.sun.org.apache.xerces.internal.jaxp;import java.util.Enumeration;import java.util.HashMap;import java.util.Hashtable;import javax.xml.parsers.SAXParserFactory;import javax.xml.validation.Schema;import com.sun.org.apache.xerces.internal.impl.Constants;import com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser;import com.sun.org.apache.xerces.internal.parsers.JAXPConfiguration;import org.xml.sax.SAXException;import org.xml.sax.SAXNotRecognizedException;import org.xml.sax.SAXNotSupportedException;import org.xml.sax.XMLReader;import com.sun.org.apache.xerces.internal.util.SecurityManager;import com.sun.org.apache.xerces.internal.util.SAXMessageFormatter;import com.sun.org.apache.xerces.internal.xni.XNIException;import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;/** * This is the implementation specific class for the * <code>javax.xml.parsers.SAXParser</code>. * * @author Rajiv Mordani * @author Edwin Goei * * @version $Id: SAXParserImpl.java,v 1.23 2004/02/24 23:15:58 mrglavas Exp $ */public class SAXParserImpl extends javax.xml.parsers.SAXParser implements JAXPConstants { // Should XMLParserConfiguration have reset, ? we have reset at component level private final JAXPConfiguration parserConfiguration; private final AbstractSAXParser xmlReader; private String schemaLanguage = null; // null means DTD private final Schema grammar; private final SecurityManager secureProcessing; private boolean isXIncludeAware; private boolean enableSecureProcessing = true; //we have to keep the reference to features and SAXParserFactory so that //we can set the SAXParser to the same state when it //was createed from the factory. private Hashtable features; private SAXParserFactory spf; private Hashtable parserFeatures = new Hashtable(); public boolean isXIncludeAware() { return isXIncludeAware; } /** * Create a SAX parser with the associated features * @param features Hashtable of SAX features, may be null */ SAXParserImpl(SAXParserFactory spfactory, Hashtable factoryfeatures) throws SAXException { this.spf = spfactory ; this.features = factoryfeatures; // inherit secureProcessing = new SecurityManager(); this.grammar = spf.getSchema(); parserConfiguration = new JAXPConfiguration(grammar); xmlReader = new com.sun.org.apache.xerces.internal.parsers.SAXParser(parserConfiguration); //initialize the feature as per factory settings.. init(); } /** Reset this instance back to factory settings */ void resetSettings() throws SAXNotSupportedException, SAXNotRecognizedException { Enumeration keys = parserFeatures.keys(); while(keys.hasMoreElements()){ String propertyId = (String)keys.nextElement(); Object value = parserFeatures.get(propertyId); if(value instanceof Boolean){ //System.out.println("Remvoing feature = " + propertyId + " with value = " + parserConfiguration.getFeatureDefaultValue(propertyId)); //this means it is a feature, we have to get default value from the configuration xmlReader.setFeature(propertyId, parserConfiguration.getFeatureDefaultValue(propertyId)); } else{//it's a property //System.out.println("Remvoing property = " + propertyId); //null value should delete the property from underlying implementation. xmlReader.setProperty(propertyId, null); } } //clear the hashtable once we have removed all the properties. parserFeatures.clear(); } //initialize the features as per factory settings. void init() throws SAXNotSupportedException, SAXNotRecognizedException { schemaLanguage = null ; this.isXIncludeAware = spf.isXIncludeAware(); if(features != null ){ Object tmpValue = features.get(Constants.FEATURE_SECURE_PROCESSING); if( tmpValue != null ) enableSecureProcessing = ((Boolean)tmpValue).booleanValue(); } if(enableSecureProcessing){ try { setProperty(Constants.XERCES_PROPERTY_PREFIX + Constants.SECURITY_MANAGER_PROPERTY, secureProcessing); } catch (SAXNotRecognizedException sex) { sex.printStackTrace(); } catch (SAXNotSupportedException se) { se.printStackTrace(); } } xmlReader.setFeature( Constants.XERCES_FEATURE_PREFIX + Constants.XINCLUDE_AWARE, isXIncludeAware); // If validating, provide a default ErrorHandler that prints // validation errors with a warning telling the user to set an // ErrorHandler. if (spf.isValidating()) { xmlReader.setErrorHandler(new DefaultValidationErrorHandler()); } xmlReader.setFeature(Constants.SAX_FEATURE_PREFIX + Constants.VALIDATION_FEATURE, spf.isValidating()); // JAXP "namespaceAware" == SAX Namespaces feature // Note: there is a compatibility problem here with default values: // JAXP default is false while SAX 2 default is true! xmlReader.setFeature(Constants.SAX_FEATURE_PREFIX + Constants.NAMESPACES_FEATURE, spf.isNamespaceAware()); // SAX "namespaces" and "namespace-prefixes" features should not // both be false. We make them opposite for backward compatibility // since JAXP 1.0 apps may want to receive xmlns* attributes. xmlReader.setFeature(Constants.SAX_FEATURE_PREFIX + Constants.NAMESPACE_PREFIXES_FEATURE, !spf.isNamespaceAware()); setFeatures(features); }//init() /** * Set any features of our XMLReader based on any features set on the * SAXParserFactory. * * XXX Does not handle possible conflicts between SAX feature names and * JAXP specific feature names, eg. SAXParserFactory.isValidating() */ private void setFeatures(Hashtable features) throws SAXNotSupportedException, SAXNotRecognizedException {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?