import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;


public class XercesSchemaRepro {
  
  public static void main(String[] args) throws Exception {
    DocumentBuilderFactory dbf;
    DocumentBuilder db;
    Document d;
    
    dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    dbf.setValidating(true); 
    dbf.setAttribute("http://apache.org/xml/features/validation/dynamic",
                    new Boolean(true));
    dbf.setAttribute("http://apache.org/xml/features/validation/schema", 
                     new Boolean(true));
    
    db = dbf.newDocumentBuilder();
    db.setErrorHandler(new XmlErrorHandler());
    d = db.parse(new File("SchemaTest.xml"));
    
    System.out.println("Done.");
    System.exit(0);
  }
  
  public static class XmlErrorHandler implements org.xml.sax.ErrorHandler
  {    
    public void warning(org.xml.sax.SAXParseException sAXParseException) throws org.xml.sax.SAXException {
      System.out.println("Warning at " + sAXParseException.getLineNumber() + "/" + sAXParseException.getColumnNumber()  + ": " + sAXParseException.getMessage());
    }
    
    public void error(org.xml.sax.SAXParseException sAXParseException) throws org.xml.sax.SAXException {
      System.out.println("Error at " + sAXParseException.getLineNumber() + "/" + sAXParseException.getColumnNumber()  + ": " + sAXParseException.getMessage());
    }
    
    public void fatalError(org.xml.sax.SAXParseException sAXParseException) throws org.xml.sax.SAXException {
      System.out.println("Fatal error at " + sAXParseException.getLineNumber() + "/" + sAXParseException.getColumnNumber()  + ": " + sAXParseException.getMessage());
    }    
  } // XmlErrorHandler
}
