
import org.apache.xerces.parsers.SAXParser;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import java.io.IOException;


public class SchemaValidater implements ErrorHandler {

	boolean valid = true;

    // Constructor
    public SchemaValidater(String xmlFile) {

        SAXParser parser = new SAXParser();
        //MyResolver resolver = new MyResolver();

        //  Turn Validation on
        try {
            parser.setFeature("http://xml.org/sax/features/validation", true);
            parser.setFeature("http://apache.org/xml/features/validation/schema",true);
            parser.setFeature("http://apache.org/xml/features/validation/schema-full-checking",true);
            //parser.setEntityResolver(resolver);
        }
        catch (SAXNotRecognizedException e) {
            System.err.println (e);
        }
        catch (SAXNotSupportedException e) {
            System.err.println (e);
        }
        //  Register Error Handler
        parser.setErrorHandler (this);

        //  Parse the Document
        try {
            parser.parse(xmlFile);
        }
        catch (SAXException e) {
            System.err.println (e);
        }
        catch (IOException e) {
            System.err.println (e);
        }
        catch (Exception e) {
            System.err.println (e);
        }

    }

    //  Warning Event Handler
    public void warning (SAXParseException e)
        throws SAXException {
		valid = false;
        System.err.println ("Warning:  "+e);
    }

    //  Error Event Handler
    public void error (SAXParseException e)
        throws SAXException {

		String message = e.getMessage();

		if(message.indexOf("3.x.3:") != -1 );
		else if(message.indexOf("Attribute \"eb:status\" must be declared") != -1 );
		else if(message.indexOf("Datatype error: In element 'eb:SequenceNumber'") != -1 );
		else if(message.indexOf("ds:SignedInfo") != -1 );
		else {
        	valid = false;
        	System.err.println ("Error:  "+ e);
        	//e.printStackTrace();
		}
    }

    //  Fatal Error Event Handler
    public void fatalError (SAXParseException e)
        throws SAXException {
		valid = false;
        System.err.println ("Fatal Error:  "+e);
    }

    // Main Method
    public static void main (String[] args) {
        SchemaValidater validatingDOM = new SchemaValidater("ebxml.xml");
        System.err.println (" VALID VIJAY = :  "+ validatingDOM.isValid());
    }


    public boolean isValid() {
		return valid;
	}
}