jaxpconfiguration.java

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

JAVA
109
字号
package com.sun.org.apache.xerces.internal.parsers;import javax.xml.validation.Schema;import javax.xml.validation.ValidatorHandler;import com.sun.org.apache.xerces.internal.jaxp.JAXPValidatorComponent;import com.sun.org.apache.xerces.internal.jaxp.validation.InsulatedValidatorComponent;import com.sun.org.apache.xerces.internal.jaxp.validation.XercesSchema;import com.sun.org.apache.xerces.internal.xni.parser.XMLComponent;import com.sun.org.apache.xerces.internal.xni.parser.XMLDocumentFilter;/** * {@link com.sun.org.apache.xerces.internal.xni.parser.XMLParseException} that * includes a JAXP {@link ValidatorHandler} in the middle.  *  * @author *     Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com) *     Venu Gopal (k.venugopal@sun.com) */public class JAXPConfiguration extends XIncludeParserConfiguration {        /** can be null. */    private final Schema fSchema;        /**     *      * @param grammar     *      when non-null, the parser will include validation /     *      infoset augmentation by this {@link Schema}.     */    public JAXPConfiguration(Schema schema){        this.fSchema = schema;    }        protected void configurePipeline() {        super.configurePipeline();                if (fSchema != null) {            if( isXNICapabaleSchema(fSchema) ) {                // if the validator is also from this Xerces,                // we will use the XNI-based validator for                // better performance                InsulatedValidatorComponent v = ((XercesSchema)fSchema).newXNIValidator();                addComponent(v);                                fLastComponent.setDocumentHandler(v.getValidator());                v.getValidator().setDocumentSource(fLastComponent);                fLastComponent = v.getValidator();                v.getValidator().setDocumentHandler(fDocumentHandler);            } else {                // otherwise wrap that into JAXPValidatorComponent.                XMLDocumentFilter validator = null;                ValidatorHandler validatorHandler = fSchema.newValidatorHandler();                            validator = new JAXPValidatorComponent(validatorHandler);                addComponent((XMLComponent)validator);                                fLastComponent.setDocumentHandler(validator);                validator.setDocumentSource(fLastComponent);                fLastComponent = validator;                validator.setDocumentHandler(fDocumentHandler);            }        }    }        /**     * Checks if the given {@link Schema} speaks XNI.      */    private static boolean isXNICapabaleSchema( Schema s ) {        if(!(s instanceof XercesSchema ))   return false;                try {            String v = System.getProperty(JAXPConfiguration.class.getName()+".noSchemaOptimization");            if(v==null)                // there might be a bug in the optimization we do.                // this property provides an escape hatch for such a situation                // by forcing non-optimized way.                return false;        } catch( Throwable t ) {            ;        }                // otherwise if schema derives from XercesSchema,        // we set up better optimized pipeline.        return true;    }        public boolean getFeatureDefaultValue(String featureId){        // reset every component        int count = fComponents.size();        for (int i = 0; i < count; i++) {            XMLComponent c = (XMLComponent) fComponents.get(i);            Boolean bo = c.getFeatureDefault(featureId);            if(bo != null){                return bo.booleanValue();            }            //null if component doesn't recognize this feature.            //continue it might be present in some other components.            //it might make sense to store default values of feature for             //the current configuration that would make the lookup faster.                    }        //if it wasn't found in all the components return false;        return false;    }    }

⌨️ 快捷键说明

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