/* * Copyright 2003 Federal Chancellery Austria * MOA-ID has been developed in a cooperation between BRZ, the Federal * Chancellery Austria - ICT staff unit, and Graz University of Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ package test.at.gv.egovernment.moa.util; import java.io.FileInputStream; import java.io.InputStream; import org.apache.xerces.parsers.DOMParser; import org.apache.xerces.parsers.XMLGrammarPreparser; import org.apache.xerces.util.SymbolTable; import org.apache.xerces.util.XMLGrammarPoolImpl; import org.apache.xerces.xni.grammars.Grammar; import org.apache.xerces.xni.grammars.XMLGrammarDescription; import org.apache.xerces.xni.parser.XMLInputSource; import org.xml.sax.InputSource; import at.gv.egovernment.moaspss.util.Constants; import test.at.gv.egovernment.moa.MOATestCase; /** * Experimentation with Xerces grammar caching. * * Used the Xerces sample 'XMLGrammarBuilder' as a starting point. * * @author Patrick Peck * @version $Id$ */ public class XMLGrammarBuilderTest extends MOATestCase { private static final String GRAMMAR_POOL = org.apache.xerces.impl.Constants.XERCES_PROPERTY_PREFIX + org.apache.xerces.impl.Constants.XMLGRAMMAR_POOL_PROPERTY; protected static final String NAMESPACES_FEATURE_ID = "http://xml.org/sax/features/namespaces"; protected static final String VALIDATION_FEATURE_ID = "http://xml.org/sax/features/validation"; protected static final String SCHEMA_VALIDATION_FEATURE_ID = "http://apache.org/xml/features/validation/schema"; protected static final String SCHEMA_FULL_CHECKING_FEATURE_ID = "http://apache.org/xml/features/validation/schema-full-checking"; private static final int BIG_PRIME = 2039; private SymbolTable symbolTable; private XMLGrammarPoolImpl grammarPool; /** * Constructor for XMLGrammarBuilderTest. * @param name */ public XMLGrammarBuilderTest(String name) { super(name); } protected void setUp() throws Exception { XMLGrammarPreparser preparser; // set up symbol table and grammar pool symbolTable = new SymbolTable(BIG_PRIME); grammarPool = new XMLGrammarPoolImpl(); preparser = new XMLGrammarPreparser(symbolTable); preparser.registerPreparser(XMLGrammarDescription.XML_SCHEMA, null); preparser.setProperty(GRAMMAR_POOL, grammarPool); preparser.setFeature(NAMESPACES_FEATURE_ID, true); preparser.setFeature(VALIDATION_FEATURE_ID, true); // now we can still do schema features just in case, // so long as it's our configuraiton...... preparser.setFeature(SCHEMA_VALIDATION_FEATURE_ID, true); preparseSchemaResource( preparser, Constants.DSIG_SCHEMA_LOCATION, "/resources/schemas/xmldsig-core-schema.xsd"); } private static Grammar preparseSchemaResource( XMLGrammarPreparser preparser, String systemId, String resource) throws Exception { InputStream is = XMLGrammarBuilderTest.class.getResourceAsStream(resource); return preparser.preparseGrammar( XMLGrammarDescription.XML_SCHEMA, new XMLInputSource(null, systemId, null, is, null)); } public void testParseValidating() throws Exception { DOMParser parser = new DOMParser(symbolTable, grammarPool); parser.setFeature(NAMESPACES_FEATURE_ID, true); parser.setFeature(VALIDATION_FEATURE_ID, true); parser.setFeature(SCHEMA_VALIDATION_FEATURE_ID, true); parser.parse( new InputSource( new FileInputStream(TESTDATA_ROOT + "xml/dsigTransform/base64.xml"))); parser.getDocument(); } }