import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; import java.io.*; // A Simple SAX Application using JAXP with Namespace support public class SimpleSchema{ private SAXParserFactory factory; // Creates parser object private SAXParser parser; // Holds a parser object private XMLReader xmlReader; // Object that parses the file private DefaultHandler handler; // Defines the handler for this parser private boolean valid = true; // Set schema constants static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource"; public SimpleSchema() throws SAXException{ try{ factory = SAXParserFactory.newInstance(); factory.setValidating(true); factory.setNamespaceAware(true); if (factory.isValidating()){ System.out.println("The parser is validating"); } //Create Parser parser = factory.newSAXParser(); // Enable Schemas parser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); //Create XMLReader xmlReader = parser.getXMLReader(); ContentHandler cHandler = new MyDefaultHandler(); ErrorHandler eHandler = new MyDefaultHandler(); xmlReader.setContentHandler(cHandler); xmlReader.setErrorHandler(eHandler); } catch (ParserConfigurationException e){ e.printStackTrace(); } catch (SAXException e){ e.printStackTrace(); } } public void parseDocument(String xmlFile){ try{ xmlReader.parse(xmlFile); if (valid) { System.out.println("Document is valid!"); } } catch (SAXException e){ e.printStackTrace(); } catch (IOException e){ e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); } } public static void main(String[] args){ try { if (args.length != 1) { System.out.println( "Usage: java SimpleSchema " + "[XML Document Filename]"); System.exit(0); } SimpleSchema xmlApp = new SimpleSchema(); xmlApp.parseDocument(args[0]); } catch (SAXException e){ e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } class MyDefaultHandler extends DefaultHandler{ private CharArrayWriter buff = new CharArrayWriter(); private String errMessage = ""; /* With a handler class, just override the methods you need to use */ // Start Error Handler code here public void warning(SAXParseException e) { System.out.println("Warning Line " + e.getLineNumber() + ": " + e.getMessage() + "\n"); } public void error(SAXParseException e) { errMessage = new String("Error Line " + e.getLineNumber() + ": " + e.getMessage() + "\n"); System.out.println(errMessage); valid = false; } public void fatalError(SAXParseException e) { errMessage = new String("Error Line " + e.getLineNumber() + ": " + e.getMessage() + "\n"); System.out.println(errMessage); valid = false; } } }