/*
* Created on 2005-apr-03
*/
import java.io.FileInputStream;
import java.io.File;
import org.xml.sax.XMLReader;
import org.xml.sax.InputSource;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXParseException;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.XMLReaderFactory;
/**
* SAX-klass med metoder för att avgöra om en xml-fil är välutformad och valid
*
* @author Henrik Johansson
*/
public class SAXChecker implements ErrorHandler {
private boolean noerrors = true;
private boolean nofatals = true;
/**
* Parsar xml-filen filename. Denna klass implementerar
* ErrorHandler, vid varningar eller fel under parsningen
* kommer parsern att anropa metoderna warning, error eller fatalError.
*
* @param filename namnet på xml-filen
* @param valid skall validiteten kontrolleras
*/
public void check(String filename, boolean valid) {
try {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setErrorHandler(this);
reader.setFeature("http://xml.org/sax/features/validation", valid);
InputSource is = new InputSource(new FileInputStream(new File(filename)));
is.setSystemId(filename);
reader.parse(is);
} catch(Exception e) {
}
if(nofatals) {
System.out.println(filename + " är välutformad.");
} else {
System.out.println(filename + " är _INTE_ välutformad.");
}
if(valid && noerrors) {
System.out.println(filename + " är valid.");
} else if(valid) {
System.out.println(filename + " är _INTE_ valid.");
}
}
/**
* Skriver ut fel- eller varningsmeddelande till stderr
*
* @param type vilken typ av fel: varning, error fatal error.
* @param exception det undantag som genererats av felet
*/
private void printMessage(String type, SAXParseException exception) {
System.err.println(type + ": row=" + exception.getLineNumber() + ", column=" + exception.getColumnNumber());
exception.printStackTrace();
System.out.println();
}
/**
* @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException)
*/
public void warning(SAXParseException exception) throws SAXException {
printMessage("WARNING", exception);
}
/**
* @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException)
*/
public void error(SAXParseException exception) throws SAXException {
noerrors = false;
printMessage("ERROR", exception);
}
/**
* @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException)
*/
public void fatalError(SAXParseException exception) throws SAXException {
nofatals = false;
printMessage("FATAL ERROR", exception);
}
public static void main(String[] args) {
SAXChecker sc = new SAXChecker();
if(args.length != 2) {
System.err.println("usage: java SAXChecker ");
System.exit(1);
}
boolean validate = args[1].toLowerCase().equals("true");
sc.check(args[0], validate);
}
}