domasbuilderimpl.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 336 行

JAVA
336
字号
/* * The Apache Software License, Version 1.1 * * * Copyright (c) 2000-2002 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.parsers;import java.util.Vector;import com.sun.org.apache.xerces.internal.dom.ASModelImpl;import com.sun.org.apache.xerces.internal.dom3.as.ASModel;import com.sun.org.apache.xerces.internal.dom3.as.DOMASBuilder;import com.sun.org.apache.xerces.internal.dom3.as.DOMASException;import com.sun.org.apache.xerces.internal.impl.Constants;import com.sun.org.apache.xerces.internal.impl.xs.SchemaGrammar;import com.sun.org.apache.xerces.internal.impl.xs.XSGrammarBucket;import com.sun.org.apache.xerces.internal.util.SymbolTable;import com.sun.org.apache.xerces.internal.util.XMLGrammarPoolImpl;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.XMLGrammarPool;import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;import org.w3c.dom.ls.LSInput;/** * This is Abstract Schema DOM Builder class. It extends the DOMParserImpl * class. Provides support for preparsing schemas. * * @deprecated * @author Pavani Mukthipudi, Sun Microsystems Inc. * @author Neil Graham, IBM * @version $Id: DOMASBuilderImpl.java,v 1.24 2003/11/17 13:48:41 venu Exp $ * */public class DOMASBuilderImpl    extends DOMParserImpl implements DOMASBuilder {    //    // Constants    //    // Feature ids    protected static final String SCHEMA_FULL_CHECKING =        Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_FULL_CHECKING;    // Property ids    protected static final String ERROR_REPORTER =        Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY;    protected static final String SYMBOL_TABLE =        Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY;    protected static final String ENTITY_MANAGER =        Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_MANAGER_PROPERTY;    //    // Data    //    protected XSGrammarBucket fGrammarBucket;    protected ASModelImpl fAbstractSchema;    //    // Constructors    //    /**     * Constructs a DOM Builder using the dtd/xml schema parser configuration.     */    public DOMASBuilderImpl() {        super(new XMLGrammarCachingConfiguration());    } // <init>    /**     * Constructs a DOM Builder using the specified parser configuration.     * We must demand that the configuration extend XMLGrammarCachingConfiguration to make     * sure all relevant methods/features are available.     */    public DOMASBuilderImpl(XMLGrammarCachingConfiguration config) {        super(config);    } // <init>(XMLParserConfiguration)    /**     * Constructs a DOM Builder using the specified symbol table.     */    public DOMASBuilderImpl(SymbolTable symbolTable) {        super(new XMLGrammarCachingConfiguration(symbolTable));    } // <init>(SymbolTable)    /**     * Constructs a DOM Builder using the specified symbol table and     * grammar pool.     * The grammarPool implementation should extent the default     * implementation; otherwise, correct functioning of this class may     * not occur.     */    public DOMASBuilderImpl(SymbolTable symbolTable, XMLGrammarPool grammarPool) {        super(new XMLGrammarCachingConfiguration(symbolTable, grammarPool));    }    //    // DOMASBuilder methods    //    /**     * Associate an <code>ASModel</code> with a document instance. This     * <code>ASModel</code> will be used by the "     * <code>validate-if-schema</code>" and "     * <code>datatype-normalization</code>" options during the load of a new     * <code>Document</code>.     */    public ASModel getAbstractSchema() {        return fAbstractSchema;    }    /**     * Associate an <code>ASModel</code> with a document instance. This     * <code>ASModel</code> will be used by the "     * <code>validate-if-schema</code>" and "     * <code>datatype-normalization</code>" options during the load of a new     * <code>Document</code>.     */    public void setAbstractSchema(ASModel abstractSchema) {        // since the ASModel associated with this object is an attribute        // according to the DOM IDL, we must obliterate anything        // that was set before, rather than adding to it.        // REVISIT:  so shouldn't we attempt to clear the        // grammarPool before adding stuff to it?  - NG        fAbstractSchema = (ASModelImpl)abstractSchema;        // make sure the GrammarPool is properly initialized.        XMLGrammarPool grammarPool = (XMLGrammarPool)fConfiguration.getProperty(StandardParserConfiguration.XMLGRAMMAR_POOL);        // if there is no grammar pool, create one        // REVISIT: ASBuilder should always create one.        if (grammarPool == null) {            // something's not right in this situation...            grammarPool = new XMLGrammarPoolImpl();            fConfiguration.setProperty(StandardParserConfiguration.XMLGRAMMAR_POOL,                                       grammarPool);        }        if (fAbstractSchema != null) {            initGrammarPool(fAbstractSchema, grammarPool);        }    }    /**     * Parse a Abstract Schema from a location identified by an URI.     *     * @param uri The location of the Abstract Schema to be read.     * @return The newly created <code>Abstract Schema</code>.     * @exception DOMASException     *   Exceptions raised by <code>parseASURI()</code> originate with the     *   installed ErrorHandler, and thus depend on the implementation of     *   the <code>DOMErrorHandler</code> interfaces. The default error     *   handlers will raise a <code>DOMASException</code> if any form of     *   Abstract Schema inconsistencies or warning occurs during the parse,     *   but application defined errorHandlers are not required to do so.     *   <br> WRONG_MIME_TYPE_ERR: Raised when <code>mimeTypeCheck</code> is     *   <code>true</code> and the inputsource has an incorrect MIME Type.     *   See attribute <code>mimeTypeCheck</code>.     * @exception DOMSystemException     *   Exceptions raised by <code>parseURI()</code> originate with the     *   installed ErrorHandler, and thus depend on the implementation of     *   the <code>DOMErrorHandler</code> interfaces. The default error     *   handlers will raise a DOMSystemException if any form I/O or other     *   system error occurs during the parse, but application defined error     *   handlers are not required to do so.     */    public ASModel parseASURI(String uri)                              throws DOMASException, Exception {        XMLInputSource source = new XMLInputSource(null, uri, null);        return parseASInputSource(source);    }    /**     * Parse a Abstract Schema from a location identified by an     * <code>LSInput</code>.     *     * @param is The <code>LSInput</code> from which the source     *   Abstract Schema is to be read.     * @return The newly created <code>ASModel</code>.     * @exception DOMASException     *   Exceptions raised by <code>parseASURI()</code> originate with the     *   installed ErrorHandler, and thus depend on the implementation of     *   the <code>DOMErrorHandler</code> interfaces. The default error     *   handlers will raise a <code>DOMASException</code> if any form of     *   Abstract Schema inconsistencies or warning occurs during the parse,     *   but application defined errorHandlers are not required to do so.     *   <br> WRONG_MIME_TYPE_ERR: Raised when <code>mimeTypeCheck</code> is     *   true and the inputsource has an incorrect MIME Type. See attribute     *   <code>mimeTypeCheck</code>.     * @exception DOMSystemException     *   Exceptions raised by <code>parseURI()</code> originate with the     *   installed ErrorHandler, and thus depend on the implementation of     *   the <code>DOMErrorHandler</code> interfaces. The default error     *   handlers will raise a DOMSystemException if any form I/O or other     *   system error occurs during the parse, but application defined error     *   handlers are not required to do so.     */    public ASModel parseASInputSource(LSInput is)                                      throws DOMASException, Exception {                                              // need to wrap the LSInput with an XMLInputSource        XMLInputSource xis = this.dom2xmlInputSource(is);        try {            return parseASInputSource(xis);        }        catch (XNIException e) {            Exception ex = e.getException();            throw ex;        }    }    ASModel parseASInputSource(XMLInputSource is) throws Exception {                                              if (fGrammarBucket == null) {            fGrammarBucket = new XSGrammarBucket();        }        initGrammarBucket();        // actually do the parse:        // save some casting        XMLGrammarCachingConfiguration gramConfig = (XMLGrammarCachingConfiguration)fConfiguration;        // ensure grammarPool doesn't absorb grammars while it's parsing        gramConfig.lockGrammarPool();        SchemaGrammar grammar = gramConfig.parseXMLSchema(is);        gramConfig.unlockGrammarPool();        ASModelImpl newAsModel = null;        if (grammar != null) {            newAsModel = new ASModelImpl();            fGrammarBucket.putGrammar (grammar, true);            addGrammars(newAsModel, fGrammarBucket);        }        return newAsModel;    }    // put all the grammars we have access to in the GrammarBucket    private void initGrammarBucket() {        fGrammarBucket.reset();        if (fAbstractSchema != null)            initGrammarBucketRecurse(fAbstractSchema);    }    private void initGrammarBucketRecurse(ASModelImpl currModel) {        if(currModel.getGrammar() != null) {            fGrammarBucket.putGrammar(currModel.getGrammar());        }        for(int i = 0; i < currModel.getInternalASModels().size(); i++) {            ASModelImpl nextModel = (ASModelImpl)(currModel.getInternalASModels().elementAt(i));            initGrammarBucketRecurse(nextModel);        }    }    private void addGrammars(ASModelImpl model, XSGrammarBucket grammarBucket) {        SchemaGrammar [] grammarList = grammarBucket.getGrammars();        for(int i=0; i<grammarList.length; i++) {            ASModelImpl newModel = new ASModelImpl();            newModel.setGrammar(grammarList[i]);            model.addASModel(newModel);        }    } // addGrammars    private void initGrammarPool(ASModelImpl currModel, XMLGrammarPool grammarPool) {        // put all the grammars in fAbstractSchema into the grammar pool.        // grammarPool must never be null!        Grammar[] grammars = new Grammar[1];        if ((grammars[0] = (Grammar)currModel.getGrammar()) != null) {            grammarPool.cacheGrammars(grammars[0].getGrammarDescription().getGrammarType(), grammars);        }        Vector modelStore = currModel.getInternalASModels();        for (int i = 0; i < modelStore.size(); i++) {            initGrammarPool((ASModelImpl)modelStore.elementAt(i), grammarPool);        }    }} // class DOMASBuilderImpl

⌨️ 快捷键说明

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