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 + -
显示快捷键?