import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXParseException; import org.xml.sax.helpers.DefaultHandler; /** * Lecture 9's demonstration of validation * by XML DTD or XML Schema. * * @author Computer Science E-259 **/ public class SAXValidator2 extends DefaultHandler { /** * Main driver. Expects one command-line argument: * the name of the XML file to validate * * @param argv [0] - filename */ public static void main(String [] argv) { if (argv.length == 0) { System.out.println("Usage: SAXValidator2 file [dtd|xsd]"); System.exit(1); } // grab filename String input = argv[0]; // grab validation mechanism, if any String validator = (argv.length > 1) ? argv[1] : null; // process input as requested try { // instantiate a reference to a SAX parser SAXParser parser = null; // instantiate a SAX parser factory SAXParserFactory factory = SAXParserFactory.newInstance(); // instantiate a SAX parser, enabling validation as requested if (validator != null && validator.equals("dtd")) { factory.setValidating(true); parser = factory.newSAXParser(); System.out.println("Validation by DTD on."); } else if (validator != null && validator.equals("xsd")) { factory.setNamespaceAware(true); factory.setValidating(true); parser = factory.newSAXParser(); parser.setProperty ( "http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema" ); System.out.println("Validation by XML Schema on."); } else { factory.setValidating(false); parser = factory.newSAXParser(); System.out.println("Validation off."); } // instantiate our little handler SAXValidator2 handler = new SAXValidator2(); // parse the file parser.parse(input, handler); } catch (Exception e) { e.printStackTrace(); } } /** * Receive notification of a recoverable parser error. * * @param e the exception thrown */ public void error (SAXParseException e) { System.out.println("Parsing error: " + e.getMessage()); } /** * Receive notification of a parser warning. * * @param e the exception thrown */ public void warning (SAXParseException e) { System.out.println("Parsing warning: " + e.getMessage()); } /** * Report a fatal XML parsing error. * * @param e the exception thrown */ public void fatalError (SAXParseException e) { System.out.println("Fatal parsing error: " + e.getMessage()); System.exit(1); } }