import java.io.File;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class ValidationTest extends DefaultHandler {

	private SAXParserFactory spfact = null;
	private SAXParser parser = null;
	private XMLReader reader = null;
	
	public static void main(String[] args) {
		ValidationTest vt = new ValidationTest();
	}
	
	public ValidationTest() {
		spfact = SAXParserFactory.newInstance();
		spfact.setValidating(true);
				
		try {
			parser = spfact.newSAXParser();
			reader = parser.getXMLReader();
			
			Object grammarPool = null;
			grammarPool = Class.forName("org.apache.xerces.util.XMLGrammarPoolImpl").newInstance();
			reader.setProperty("http://apache.org/xml/properties/internal/grammar-pool", grammarPool);
			
			File file_with_entities = new File("with_entities.xml");
			File file_without_entities = new File("without_entities.xml");
			
			System.out.println("The following two calls to parse should work");
			System.out.println("++++++++ start parsing with_entities.xml");
			parser.parse(file_with_entities, this);
			System.out.println("-------- end parsing with_entities.xml");
			
			System.out.println("++++++++ start parsing without_entities.xml");
			parser.parse(file_without_entities, this);
			System.out.println("-------- end parsing without_entities.xml");
			
			
			
			parser = spfact.newSAXParser();
			reader = parser.getXMLReader();
			
			grammarPool = Class.forName("org.apache.xerces.util.XMLGrammarPoolImpl").newInstance();
			reader.setProperty("http://apache.org/xml/properties/internal/grammar-pool", grammarPool);
			
			System.out.println("\n\nThe second call to parse doesn't work");
			System.out.println("++++++++ start parsing without_entities.xml");
			parser.parse(file_without_entities, this);
			System.out.println("-------- end parsing without_entities.xml");
			
			System.out.println("++++++++ start parsing with_entities.xml");
			parser.parse(file_with_entities, this);
			System.out.println("-------- end parsing with_entities.xml");
			
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
	}

	public void error(SAXParseException e) throws SAXException {
		System.out.println("Error in line " + e.getLineNumber() + " column " + e.getColumnNumber() + ": " + e.getMessage());
	}

	public void fatalError(SAXParseException e) throws SAXException {
		System.out.println("Fatal Error in line " + e.getLineNumber() + " column " + e.getColumnNumber() + ": " + e.getMessage());
	}

	public void warning(SAXParseException e) throws SAXException {
		System.out.println("Warning in line " + e.getLineNumber() + " column " + e.getColumnNumber() + ": " + e.getMessage());
	}
	
	

}

