1:import javax.xml.parsers.*;
   2:import org.xml.sax.*;
   3:import org.xml.sax.helpers.*;
   4:import java.io.*;
   5:
   6:// A Simple SAX Application using JAXP with Namespace support
   7:public class SimpleSchema{
   8:    private SAXParserFactory factory; // Creates parser object
   9:    private SAXParser parser; // Holds a parser object
  10:    private XMLReader xmlReader; // Object that parses the file
  11:    private DefaultHandler handler; // Defines the handler for this parser
  12:    private boolean valid = true;
  13:    
  14:    // Set schema constants
  15:    static final String JAXP_SCHEMA_LANGUAGE =
  16:        "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
  17:    static final String W3C_XML_SCHEMA =         "http://www.w3.org/2001/XMLSchema";
  18:    static final String JAXP_SCHEMA_SOURCE =         "http://java.sun.com/xml/jaxp/properties/schemaSource";
  19:
  20:    
  21:    public SimpleSchema() throws SAXException{
  22:        try{
  23:            factory = SAXParserFactory.newInstance();
  24:            factory.setValidating(true);
  25:            factory.setNamespaceAware(true);
  26:            
  27:            if (factory.isValidating()){
  28:                System.out.println("The parser is validating");
  29:            }
  30:            
  31:            //Create Parser
  32:            parser = factory.newSAXParser();
  33:            
  34:            // Enable Schemas
  35:            parser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
  36:            
  37:            //Create XMLReader
  38:            xmlReader = parser.getXMLReader();
  39:                        
  40:            ContentHandler cHandler = new MyDefaultHandler();
  41:            ErrorHandler eHandler = new MyDefaultHandler();
  42:            
  43:            xmlReader.setContentHandler(cHandler);
  44:            xmlReader.setErrorHandler(eHandler);
  45:            
  46:        }  catch (ParserConfigurationException e){
  47:            e.printStackTrace();
  48:        } catch (SAXException e){
  49:            e.printStackTrace();
  50:        }
  51:    }
  52:    
  53:    public void parseDocument(String xmlFile){
  54:        try{
  55:            xmlReader.parse(xmlFile);
  56:            if (valid) {
  57:                System.out.println("Document is valid!");
  58:            }
  59:        } catch (SAXException e){
  60:            e.printStackTrace();
  61:        } catch (IOException e){
  62:            e.printStackTrace();
  63:        } catch (Exception e){
  64:            e.printStackTrace();
  65:        }
  66:    }
  67:    
  68:    public static void main(String[] args){
  69:        try {
  70:            if (args.length != 1) {
  71:                System.out.println(
  72:                    "Usage: java SimpleSchema " +
  73:                    "[XML Document Filename]");
  74:                System.exit(0);
  75:            }
  76:            SimpleSchema xmlApp = new SimpleSchema();
  77:            xmlApp.parseDocument(args[0]);
  78:        } catch (SAXException e){
  79:            e.printStackTrace();
  80:        } catch (Exception e) {
  81:            e.printStackTrace();
  82:        }
  83:    }
  84:    
  85:    class MyDefaultHandler extends DefaultHandler{
  86:        private CharArrayWriter buff = new CharArrayWriter();
  87:        private String errMessage = "";
  88:        /* With a handler class, just override the methods you need to use
  89:        */
  90:
  91:        // Start Error Handler code here
  92:        public void warning(SAXParseException e) {
  93:            System.out.println("Warning Line " + e.getLineNumber() + ": " + e.getMessage() + "\n");
  94:        }
  95:        
  96:        public void error(SAXParseException e) {
  97:            errMessage = new String("Error Line " + e.getLineNumber() + ": " + e.getMessage() + "\n");
  98:            System.out.println(errMessage);
  99:            valid = false;
 100:        }
 101:
 102:        public void fatalError(SAXParseException e) {
 103:            errMessage = new String("Error Line " + e.getLineNumber() + ": " + e.getMessage() + "\n");
 104:            System.out.println(errMessage);
 105:            valid = false;
 106:        }
 107:    }
 108:}
 109: