xmlschemaloader.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 1,299 行 · 第 1/4 页

JAVA
1,299
字号
/* * The Apache Software License, Version 1.1 * * * Copyright (c) 2000-2003 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, International * Business Machines, Inc., http://www.apache.org.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */package com.sun.org.apache.xerces.internal.impl.xs;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.Reader;import java.io.StringReader;import java.util.Hashtable;import java.util.Locale;import java.util.StringTokenizer;import java.util.Vector;import javax.xml.transform.Source;import com.sun.org.apache.xerces.internal.dom.DOMErrorImpl;import com.sun.org.apache.xerces.internal.dom.DOMMessageFormatter;import com.sun.org.apache.xerces.internal.dom.DOMStringListImpl;import com.sun.org.apache.xerces.internal.impl.Constants;import com.sun.org.apache.xerces.internal.impl.XMLEntityManager;import com.sun.org.apache.xerces.internal.impl.XMLErrorReporter;import com.sun.org.apache.xerces.internal.impl.dv.InvalidDatatypeValueException;import com.sun.org.apache.xerces.internal.impl.xs.models.CMBuilder;import com.sun.org.apache.xerces.internal.impl.xs.models.CMNodeFactory;import com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler;import com.sun.org.apache.xerces.internal.util.DOMErrorHandlerWrapper;import com.sun.org.apache.xerces.internal.util.DefaultErrorHandler;import com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings;import com.sun.org.apache.xerces.internal.util.SymbolTable;import com.sun.org.apache.xerces.internal.util.XMLSymbols;import com.sun.org.apache.xerces.internal.xni.XNIException;import com.sun.org.apache.xerces.internal.xni.grammars.Grammar;import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarDescription;import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarLoader;import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarPool;import com.sun.org.apache.xerces.internal.xni.grammars.XSGrammar;import com.sun.org.apache.xerces.internal.xni.parser.XMLComponent;import com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager;import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException;import com.sun.org.apache.xerces.internal.xni.parser.XMLEntityResolver;import com.sun.org.apache.xerces.internal.xni.parser.XMLErrorHandler;import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;import com.sun.org.apache.xerces.internal.xs.LSInputList;import com.sun.org.apache.xerces.internal.xs.StringList;import com.sun.org.apache.xerces.internal.xs.XSLoader;import com.sun.org.apache.xerces.internal.xs.XSModel;import org.w3c.dom.DOMConfiguration;import org.w3c.dom.DOMError;import org.w3c.dom.DOMErrorHandler;import org.w3c.dom.DOMException;import org.w3c.dom.DOMStringList;import org.w3c.dom.ls.LSInput;import org.xml.sax.InputSource;/** * This class implements xni.grammars.XMLGrammarLoader. * It also serves as implementation of xs.XSLoader interface and DOMConfiguration interface. *  * This class is designed to interact either with a proxy for a user application  * which wants to preparse schemas, or with our own Schema validator.   * It is hoped that none of these "external" classes will therefore need to communicate directly * with XSDHandler in future. * <p>This class only knows how to make XSDHandler do its thing. * The caller must ensure that all its properties (schemaLocation, JAXPSchemaSource * etc.) have been properly set. * * @author Neil Graham, IBM * @version $Id: XMLSchemaLoader.java,v 1.26 2004/01/29 22:26:00 mrglavas Exp $ */public class XMLSchemaLoader implements XMLGrammarLoader, XMLComponent,                                        // XML Component API                                         XSLoader, DOMConfiguration {    // Feature identifiers:    /** Feature identifier: schema full checking*/    protected static final String SCHEMA_FULL_CHECKING =     Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_FULL_CHECKING;    /** Feature identifier: continue after fatal error. */    protected static final String CONTINUE_AFTER_FATAL_ERROR =        Constants.XERCES_FEATURE_PREFIX + Constants.CONTINUE_AFTER_FATAL_ERROR_FEATURE;    /** Feature identifier: allow java encodings to be recognized when parsing schema docs. */    protected static final String ALLOW_JAVA_ENCODINGS =        Constants.XERCES_FEATURE_PREFIX + Constants.ALLOW_JAVA_ENCODINGS_FEATURE;    /** Feature identifier: standard uri conformant feature. */    protected static final String STANDARD_URI_CONFORMANT_FEATURE =        Constants.XERCES_FEATURE_PREFIX + Constants.STANDARD_URI_CONFORMANT_FEATURE;            /** Feature: disallow doctype*/    protected static final String DISALLOW_DOCTYPE =         Constants.XERCES_FEATURE_PREFIX + Constants.DISALLOW_DOCTYPE_DECL_FEATURE;                     protected static final String AUGMENT_PSVI =        Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_AUGMENT_PSVI;               protected static final String PARSER_SETTINGS =                 Constants.XERCES_FEATURE_PREFIX + Constants.PARSER_SETTINGS;       // recognized features:    private static final String[] RECOGNIZED_FEATURES = {        SCHEMA_FULL_CHECKING,        AUGMENT_PSVI,        CONTINUE_AFTER_FATAL_ERROR,        ALLOW_JAVA_ENCODINGS,        STANDARD_URI_CONFORMANT_FEATURE,         DISALLOW_DOCTYPE    };    // property identifiers    /** Property identifier: symbol table. */    public static final String SYMBOL_TABLE =        Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY;    /** Property identifier: error reporter. */    public static final String ERROR_REPORTER =        Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY;    /** Property identifier: error handler. */    protected static final String ERROR_HANDLER =        Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_HANDLER_PROPERTY;    /** Property identifier: entity resolver. */    public static final String ENTITY_RESOLVER =        Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_RESOLVER_PROPERTY;    /** Property identifier: grammar pool. */    public static final String XMLGRAMMAR_POOL =        Constants.XERCES_PROPERTY_PREFIX + Constants.XMLGRAMMAR_POOL_PROPERTY;    /** Property identifier: schema location. */    protected static final String SCHEMA_LOCATION =        Constants.XERCES_PROPERTY_PREFIX + Constants.SCHEMA_LOCATION;    /** Property identifier: no namespace schema location. */    protected static final String SCHEMA_NONS_LOCATION =        Constants.XERCES_PROPERTY_PREFIX + Constants.SCHEMA_NONS_LOCATION;    /** Property identifier: JAXP schema source. */    protected static final String JAXP_SCHEMA_SOURCE =        Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_SOURCE;       protected static final String SECURITY_MANAGER =        Constants.XERCES_PROPERTY_PREFIX + Constants.SECURITY_MANAGER_PROPERTY;             protected static final String ENTITY_MANAGER =                Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_MANAGER_PROPERTY;       // recognized properties    private static final String [] RECOGNIZED_PROPERTIES = {        ENTITY_MANAGER,        SYMBOL_TABLE,        ERROR_REPORTER,        ERROR_HANDLER,        ENTITY_RESOLVER,        XMLGRAMMAR_POOL,        SCHEMA_LOCATION,        SCHEMA_NONS_LOCATION,        JAXP_SCHEMA_SOURCE,        SECURITY_MANAGER    };    // Data    // features and properties    private ParserConfigurationSettings fLoaderConfig = new ParserConfigurationSettings();    private SymbolTable fSymbolTable = null;    private XMLErrorReporter fErrorReporter = new XMLErrorReporter ();    private XMLEntityManager fEntityManager = null;    private XMLEntityResolver fUserEntityResolver = null;    private XMLGrammarPool fGrammarPool = null;    private String fExternalSchemas = null;    private String fExternalNoNSSchema = null;    // JAXP property: schema source     private Object fJAXPSource = null;    // is Schema Full Checking enabled    private boolean fIsCheckedFully = false;    // boolean that tells whether we've tested the JAXP property.    private boolean fJAXPProcessed = false;    // if features/properties has not been changed, the value of this attribute is "false"    private boolean fSettingsChanged = true;    // xml schema parsing    private XSDHandler fSchemaHandler;    private XSGrammarBucket fGrammarBucket;    private XSDeclarationPool fDeclPool = null;    private SubstitutionGroupHandler fSubGroupHandler;    private CMBuilder fCMBuilder;    private XSDDescription fXSDDescription = new XSDDescription();        private Hashtable fJAXPCache;    private Locale fLocale = Locale.getDefault();    // XSLoader attributes    private DOMStringList fRecognizedParameters = null;	/** DOM L3 error handler */	private DOMErrorHandlerWrapper fErrorHandler = null;    // default constructor.  Create objects we absolutely need:    public XMLSchemaLoader() {        this( new SymbolTable(), null, new XMLEntityManager(), null, null, null);    }    public XMLSchemaLoader(SymbolTable symbolTable) {        this( symbolTable, null, new XMLEntityManager(), null, null, null);    }    /**     * This constractor is used by the XMLSchemaValidator. Additional properties, i.e. XMLEntityManager,      * will be passed during reset(XMLComponentManager).     * @param errorReporter     * @param grammarBucket     * @param sHandler     * @param builder     */    XMLSchemaLoader(XMLErrorReporter errorReporter,                XSGrammarBucket grammarBucket,                SubstitutionGroupHandler sHandler, CMBuilder builder) {        this(null, errorReporter, new XMLEntityManager(), grammarBucket, sHandler, builder);    }    XMLSchemaLoader(SymbolTable symbolTable,                XMLErrorReporter errorReporter,                XMLEntityManager entityResolver,                XSGrammarBucket grammarBucket,                SubstitutionGroupHandler sHandler,                CMBuilder builder) {                            // store properties and features in configuration        fLoaderConfig.addRecognizedFeatures(RECOGNIZED_FEATURES);        fLoaderConfig.addRecognizedProperties(RECOGNIZED_PROPERTIES);         if (symbolTable != null){             fLoaderConfig.setProperty(SYMBOL_TABLE, symbolTable);               }                         if(errorReporter == null) {            errorReporter = new XMLErrorReporter ();            errorReporter.setLocale(fLocale);            errorReporter.setProperty(ERROR_HANDLER, new DefaultErrorHandler());                    }        fErrorReporter = errorReporter;        // make sure error reporter knows about schemas...        if(fErrorReporter.getMessageFormatter(XSMessageFormatter.SCHEMA_DOMAIN) == null) {            fErrorReporter.putMessageFormatter(XSMessageFormatter.SCHEMA_DOMAIN, new XSMessageFormatter());        }        fLoaderConfig.setProperty(ERROR_REPORTER, fErrorReporter);        fEntityManager = entityResolver;           // entity manager is null if XMLSchemaValidator creates the loader          if (fEntityManager != null){               fLoaderConfig.setProperty(ENTITY_MANAGER, fEntityManager);        }                      // by default augment PSVI (i.e. don't use declaration pool)        fLoaderConfig.setFeature(AUGMENT_PSVI, true);                if(grammarBucket == null ) {            grammarBucket = new XSGrammarBucket();        }        fGrammarBucket = grammarBucket;        if(sHandler == null) {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?