import org.apache.xerces.parsers.DOMParser;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXParseException;

public class Validate
{
	boolean m_bValid = true;
	
	public Validate(String r_strXmlFile)
	{
		try
		{
			DOMParser parser = new DOMParser();

			parser.setFeature("http://xml.org/sax/features/validation",true);
		//	parser.setFeature("http://apache.org/xml/features/validation/schema-full-checking",true);
			MyErrors errors = new MyErrors();
			parser.setErrorHandler(errors);

			parser.parse(r_strXmlFile);
			if (m_bValid)
				System.out.println("The XML file is well-formed and valid.");
			else
				System.out.println("The XML file is not valid.");
		}
		catch(Exception r_exGen)
		{
			System.out.println("Exception in main(): "+r_exGen.getMessage());
		}

	}
	
	public static void main(String[] args)
	{
		String l_strXmlFile = null;
		
		if (args.length == 0)
		{
			System.out.println("XML file not provided");
			System.exit(0);
		}

		if(args.length > 1)
		{
                        System.out.println("Too many arguments");
                        System.exit(0);
                }

		
		l_strXmlFile = args[0];
			
		Validate v = new Validate(l_strXmlFile);
	}

	class MyErrors implements ErrorHandler
	{
		public void warning(SAXParseException r_exSax)
		{
			System.out.println("Warning: "+r_exSax.getMessage());
			m_bValid = false;
		}

		public void error(SAXParseException r_exSax)
		{
			System.out.println("Error: "+r_exSax.getMessage());
			m_bValid = false;
	        }

	        public void fatalError(SAXParseException r_exSax)
        	{
			System.out.println("Fatal Error: "+r_exSax.getMessage());
			m_bValid = false;
	        }
	}
}
