XML-Schema / XML-Schema Validierung in Java
![]() |
![]() |
➪ Die XML-Schema-Validierung eines XML-Dokuments kann auch über Java aufgerufen werden.
Die Methode loadSchema liest eine XML-Schema-Datei ein und generiert ein Schema-Objekt daraus:
private static Schema loadSchema(String name) {
Schema schema = null;
try {
SchemaFactory factory = null;
factory = SchemaFactory.newInstance(
"http://www.w3.org/2001/XMLSchema");
schema = factory.newSchema(new File(name));
} catch (Exception e) {
try {
String language = XMLConstants.W3C_XML_SCHEMA_NS_URI;
SchemaFactory factory = SchemaFactory.newInstance(language);
schema = factory.newSchema(new File(name));
} catch (Exception ee) {
System.out.println("Error in Schema loadSchema: "
+ name
+ " exception: "
+ ee.getMessage());
}
}
return schema;
}
loadSchema kommt zum Einsatz in der Methode validateXml, der die Adressen der XML-Schema-Datei sowie des XML-Dokuments übergeben werden müssen. Das in loadSchema generierte XML-Schema-Objekt generiert im weiteren Verlauf ein Objekt der Klasse Validator, das wiederum einen ErrorHandler (MyErrorHandler, s.u.) benötigt, um die eigentliche SAXSource-basierende Validierung durchführen zu können.
public static void validateXml(String schemafile, String xmlName) {
try {
Schema schema = loadSchema(schemafile);
Validator validator = schema.newValidator();
MyErrorHandler myhandler = new MyErrorHandler();
validator.setErrorHandler(myhandler);
SAXSource source = null;
source = new SAXSource(new InputSource(
new java.io.FileInputStream(xmlName)));
System.out.println("validating: " + xmlName);
validator.validate(source);
System.out.println("Validation passed.");
myhandler.closeFileWriter();
} catch (Exception e) {
System.out.println("validateXml: IOException "
+ e.getMessage());
}
}
Die Klasse MyErrorHandler schreibt Warnungs- bzw. Fehlermeldungen in eine separate Datei, hier habe ich sie im Standardkonstruktor "log.txt" genannt.
class MyErrorHandler implements ErrorHandler {
private FileWriter plogfilewriter;
public MyErrorHandler(FileWriter logfilewriter) {
this.plogfilewriter = logfilewriter;
}
public MyErrorHandler() {
try {
this.plogfilewriter = new FileWriter("log.txt");
} catch (IOException e) {
e.printStackTrace();
}
}
public void warning(SAXParseException arg0)
throws SAXException {
try {
this.plogfilewriter.write("warning: "
+ arg0.getMessage()
+ "\r\n");
} catch (IOException e) {
e.printStackTrace();
}
}
public void fatalError(SAXParseException arg0)
throws SAXException {
try {
this.plogfilewriter.write("fatalError: "
+ arg0.getMessage()
+ "\r\n");
} catch (IOException e) {
e.printStackTrace();
}
}
public void error(SAXParseException arg0)
throws SAXException {
try {
this.plogfilewriter.write("error: "
+ arg0.getMessage()
+ "\r\n");
} catch (IOException e) {
e.printStackTrace();
}
}
public void closeFileWriter() {
try {
this.plogfilewriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
wg / 31. Dezember 2019
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de