FileDocCategorySizeDatePackage
XMLGrammarCachingConfiguration.javaAPI DocApache Xerces 3.0.113911Fri Sep 14 20:33:54 BST 2007org.apache.xerces.parsers

XMLGrammarCachingConfiguration

public class XMLGrammarCachingConfiguration extends XIncludeAwareParserConfiguration

This configuration provides a generic way of using Xerces's grammar caching facilities. It extends the XIncludeAwareParserConfiguration and thus may validate documents according to XML schemas or DTD's. It also allows the user to preparse a grammar, and to lock the grammar pool implementation such that no more grammars will be added.

Using the org.apache.xerces.xni.parser property, an application may instantiate a Xerces SAX or DOM parser with this configuration. When invoked in this manner, the default behaviour will be elicited; to use this configuration's specific facilities, the user will need to reference it directly.

In addition to the features and properties recognized by the base parser configuration, this class recognizes these additional features and properties:

author
Neil Graham, IBM
version
$Id: XMLGrammarCachingConfiguration.java 447239 2006-09-18 05:08:26Z mrglavas $

Fields Summary
public static final int
BIG_PRIME
protected static final org.apache.xerces.util.SynchronizedSymbolTable
fStaticSymbolTable
protected static final org.apache.xerces.util.XMLGrammarPoolImpl
fStaticGrammarPool
protected static final String
SCHEMA_FULL_CHECKING
protected org.apache.xerces.impl.xs.XMLSchemaLoader
fSchemaLoader
protected org.apache.xerces.impl.dtd.XMLDTDLoader
fDTDLoader
Constructors Summary
public XMLGrammarCachingConfiguration()
Default constructor.


    //
    // Constructors
    //

       
      
        this(fStaticSymbolTable, fStaticGrammarPool, null);
    
public XMLGrammarCachingConfiguration(org.apache.xerces.util.SymbolTable symbolTable)
Constructs a parser configuration using the specified symbol table.

param
symbolTable The symbol table to use.

        this(symbolTable, fStaticGrammarPool, null);
    
public XMLGrammarCachingConfiguration(org.apache.xerces.util.SymbolTable symbolTable, org.apache.xerces.xni.grammars.XMLGrammarPool grammarPool)
Constructs a parser configuration using the specified symbol table and grammar pool.

REVISIT: Grammar pool will be updated when the new validation engine is implemented.

param
symbolTable The symbol table to use.
param
grammarPool The grammar pool to use.

        this(symbolTable, grammarPool, null);
    
public XMLGrammarCachingConfiguration(org.apache.xerces.util.SymbolTable symbolTable, org.apache.xerces.xni.grammars.XMLGrammarPool grammarPool, org.apache.xerces.xni.parser.XMLComponentManager parentSettings)
Constructs a parser configuration using the specified symbol table, grammar pool, and parent settings.

REVISIT: Grammar pool will be updated when the new validation engine is implemented.

param
symbolTable The symbol table to use.
param
grammarPool The grammar pool to use.
param
parentSettings The parent settings.

        super(symbolTable, grammarPool, parentSettings);

        // REVISIT:  may need to add some features/properties
        // specific to this configuration at some point...

        // add default recognized features
        // set state for default features
        // add default recognized properties
        // create and register missing components
        fSchemaLoader = new XMLSchemaLoader(fSymbolTable);
        fSchemaLoader.setProperty(XMLGRAMMAR_POOL, fGrammarPool);

        // and set up the DTD loader too:
        fDTDLoader = new XMLDTDLoader(fSymbolTable, fGrammarPool);
    
Methods Summary
protected voidcheckFeature(java.lang.String featureId)
Check a feature. If feature is known and supported, this method simply returns. Otherwise, the appropriate exception is thrown.

param
featureId The unique identifier (URI) of the feature.
throws
XMLConfigurationException Thrown for configuration error. In general, components should only throw this exception if it is really a critical error.


        super.checkFeature(featureId);

    
protected voidcheckProperty(java.lang.String propertyId)
Check a property. If the property is known and supported, this method simply returns. Otherwise, the appropriate exception is thrown.

param
propertyId The unique identifier (URI) of the property being set.
throws
XMLConfigurationException Thrown for configuration error. In general, components should only throw this exception if it is really a critical error.

        super.checkProperty(propertyId);

    
public voidclearGrammarPool()

        fGrammarPool.clear();
    
public voidlockGrammarPool()

        fGrammarPool.lockPool();
    
org.apache.xerces.impl.dtd.DTDGrammarparseDTD(org.apache.xerces.xni.parser.XMLInputSource is)

        XMLEntityResolver resolver = getEntityResolver();
        if(resolver != null) {
            fDTDLoader.setEntityResolver(resolver);
        }
        fDTDLoader.setProperty(ERROR_REPORTER, fErrorReporter);

        // Should check whether the grammar with this namespace is already in
        // the grammar resolver. But since we don't know the target namespace
        // of the document here, we leave such check to the application...
        DTDGrammar grammar = (DTDGrammar)fDTDLoader.loadGrammar(is);
        // by default, hand it off to the grammar pool
        if (grammar != null) {
            fGrammarPool.cacheGrammars(XMLGrammarDescription.XML_DTD,
                                      new Grammar[]{grammar});
        }
        
        return grammar;

    
public org.apache.xerces.xni.grammars.GrammarparseGrammar(java.lang.String type, java.lang.String uri)
Parse a grammar from a location identified by an URI. This method also adds this grammar to the XMLGrammarPool

param
type The type of the grammar to be constructed
param
uri The location of the grammar to be constructed. The parser will not expand this URI or make it available to the EntityResolver
return
The newly created Grammar.
exception
XNIException thrown on an error in grammar construction
exception
IOException thrown if an error is encountered in reading the file

        XMLInputSource source = new XMLInputSource(null, uri, null);
        return parseGrammar(type, source);

    
public org.apache.xerces.xni.grammars.GrammarparseGrammar(java.lang.String type, org.apache.xerces.xni.parser.XMLInputSource is)
Parse a grammar from a location identified by an XMLInputSource. This method also adds this grammar to the XMLGrammarPool

param
type The type of the grammar to be constructed
param
is The XMLInputSource containing this grammar's information If a URI is included in the systemId field, the parser will not expand this URI or make it available to the EntityResolver
return
The newly created Grammar.
exception
XNIException thrown on an error in grammar construction
exception
IOException thrown if an error is encountered in reading the file

        if(type.equals(XMLGrammarDescription.XML_SCHEMA)) {
            // by default, make all XMLGrammarPoolImpl's schema grammars available to fSchemaHandler
            return parseXMLSchema(is);
        } else if(type.equals(XMLGrammarDescription.XML_DTD)) {
            return parseDTD(is);
        }
        // don't know this grammar...
        return null;
    
org.apache.xerces.impl.xs.SchemaGrammarparseXMLSchema(org.apache.xerces.xni.parser.XMLInputSource is)

        XMLEntityResolver resolver = getEntityResolver();
        if(resolver != null) {
            fSchemaLoader.setEntityResolver(resolver);
        }
        if (fErrorReporter.getMessageFormatter(XSMessageFormatter.SCHEMA_DOMAIN) == null) {
            fErrorReporter.putMessageFormatter(XSMessageFormatter.SCHEMA_DOMAIN, new XSMessageFormatter());
        } 
        fSchemaLoader.setProperty(ERROR_REPORTER, fErrorReporter);

        String propPrefix = Constants.XERCES_PROPERTY_PREFIX;
        String propName = propPrefix + Constants.SCHEMA_LOCATION;
        fSchemaLoader.setProperty(propName, getProperty(propName));
        propName = propPrefix + Constants.SCHEMA_NONS_LOCATION;
        fSchemaLoader.setProperty(propName, getProperty(propName));
        propName = Constants.JAXP_PROPERTY_PREFIX+Constants.SCHEMA_SOURCE;
        fSchemaLoader.setProperty(propName, getProperty(propName));
        fSchemaLoader.setFeature(SCHEMA_FULL_CHECKING, getFeature(SCHEMA_FULL_CHECKING));

        // Should check whether the grammar with this namespace is already in
        // the grammar resolver. But since we don't know the target namespace
        // of the document here, we leave such check to XSDHandler
        SchemaGrammar grammar = (SchemaGrammar)fSchemaLoader.loadGrammar(is);
        // by default, hand it off to the grammar pool
        if (grammar != null) {
            fGrammarPool.cacheGrammars(XMLGrammarDescription.XML_SCHEMA,
                                      new Grammar[]{grammar});
        }
        
        return grammar;

    
public voidunlockGrammarPool()

        fGrammarPool.unlockPool();