XML Validierung - wozu? / XML Schema / XML Schema Validierung in Java

XML Schema Validierung in Java

XML Schema Validierung in Java

Die XML Schema Validierung eines XML Dokuments kann auch über Java aufgerufen werden.

XML Schema Validierung in Java

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 folgenden Methode "validateXml", der die Adressen der XML Schema-Datei sowie des XML-Dokuments übergeben werden müssen. Das in "loadSchema" generierte Schema-Object 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 / 5. Dezember 2017



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

Mobil: 0151. 750 360 61 * eMail: info2018@wilfried-grupe.de

www.wilfried-grupe.de/XSD_Java.html