* be used as the actual locations of those schemas, in the schema parse order.
* @return The parser configuration object.
*/
private static XMLParserConfiguration getParserConfiguration(LookupDeque schemaURLDeque) throws IOException
{
IntegratedParserConfiguration cfg;
// Load the grammar if specified
if (schemaURLDeque != null && schemaURLDeque.size() != 0)
{
SymbolTable symbolTable = new SymbolTable(SYMBOL_TABLE_SIZE);
XMLGrammarPreparser preparser = new XMLGrammarPreparser(symbolTable);
XMLGrammarPoolImpl grammarPool = new XMLGrammarPoolImpl();
preparser.registerPreparser(XMLGrammarDescription.XML_SCHEMA, null);
preparser.setGrammarPool(grammarPool);
preparser.setProperty(BUFFER_SIZE_PROPERTY, BUFFER_SIZE);
preparser.setFeature(NAMESPACES_FEATURE, true);
preparser.setFeature(VALIDATION_FEATURE, true);
preparser.setFeature(SCHEMA_VALIDATION_FEATURE, true);
preparser.setFeature(NODE_DEFERRAL_FEATURE, false);
preparser.setErrorHandler(ERROR_HANDLER);
preparser.setEntityResolver(new MappedResolver(schemaURLDeque));
for (Iterator itr = schemaURLDeque.valueIterator(); itr.hasNext(); )
{
URL xsdURL = (URL)itr.next();
InputStream istream = URLUtil.openStream(xsdURL);
try
{
preparser.preparseGrammar(XMLGrammarDescription.XML_SCHEMA,
new XMLInputSource(null, xsdURL.toExternalForm(), null, istream, ENCODING));
}
finally
{
IOUtil.close(istream);
}
}
grammarPool.lockPool();
cfg = new IntegratedParserConfiguration(symbolTable, grammarPool);
cfg.setFeature(VALIDATION_FEATURE, true);
cfg.setFeature(SCHEMA_VALIDATION_FEATURE, true);
}
else
{
cfg = new IntegratedParserConfiguration(new SymbolTable(SYMBOL_TABLE_SIZE));
}
cfg.setFeature(EXTERNAL_DTD_LOADING_FEATURE, false);
cfg.setErrorHandler(ERROR_HANDLER);
cfg.setEntityResolver(SECURE_RESOLVER);
// Enable FEATURE_SECURE_PROCESSING
cfg.setProperty(SECURITY_MANAGER_PROPERTY, new org.apache.xerces.util.SecurityManager());
return cfg;
}