XMLGrammarCachingConfigurationpublic 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:
|
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.
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.
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.
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 void | checkFeature(java.lang.String featureId)Check a feature. If feature is known and supported, this method simply
returns. Otherwise, the appropriate exception is thrown.
super.checkFeature(featureId);
| protected void | checkProperty(java.lang.String propertyId)Check a property. If the property is known and supported, this method
simply returns. Otherwise, the appropriate exception is thrown.
super.checkProperty(propertyId);
| public void | clearGrammarPool()
fGrammarPool.clear();
| public void | lockGrammarPool()
fGrammarPool.lockPool();
| org.apache.xerces.impl.dtd.DTDGrammar | parseDTD(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.Grammar | parseGrammar(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
XMLInputSource source = new XMLInputSource(null, uri, null);
return parseGrammar(type, source);
| public org.apache.xerces.xni.grammars.Grammar | parseGrammar(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
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.SchemaGrammar | parseXMLSchema(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 void | unlockGrammarPool()
fGrammarPool.unlockPool();
|
|