Aktuelle Remote-Seminare mit Durchführungsgarantie: Etwas Werbung in eigener Sache Termine: 03.08.-05.08.2020, 21.09.-23.09.2020, 23.11.-25.11.2020, 07.12.-09.12.2020, 22.03.-24.03.2021, 07.06.-09.06.2021, 06.09.-08.09.2021XML Einführung und Grundlagen Termine: 06.08.2020, 20.10.2020, 13.11.2020, 10.12.2020, 25.03.2021, 10.06.2021, 09.09.2021XML - der professionelle Überblick Termine: 23.11.-26.11.2020, 29.03.-01.04.2021Einstieg in die Programmierung Termine: 17.08.-19.08.2020, 14.12.-16.12.2020, 07.04.-09.04.2021XML, XSLT, XPath, XSL-FO Einführung Termine: Termin nach WunschEinstieg in C#.NET Termine: 21.09.-23.09.2020, 11.01.-13.01.2021, 26.05.-28.05.2021, 27.09.-29.09.2021VB.NET für Visual Basic-Programmierer Termine: 21.10.-23.10.2020, 14.12.-16.12.2020, 08.03.-10.03.2021, 19.07.-21.07.2021, 23.08.-25.08.2021XML Grundlagen, XSL-FO, SVG, DocBook, DITA Termine: Termin nach WunschJava Grundlagen Termine: 03.08.-06.08.2020, 30.11.-03.12.2020, 29.03.-01.04.2021C++ für Programmiereinsteiger Termine: 10.09.2020, 11.12.2020, 16.03.2021Neues Seminar: XProc Grundlagen Termine: 21.09.-25.09.2020, 01.03.-05.03.2021Java/JSP/HTML/JDBC/XML Komplett Termine: 07.09.-09.09.2020, 21.10.-23.10.2020, 23.11.-25.11.2020, 25.01.-27.01.2021, 12.04.-14.04.2021, 26.07.-28.07.2021Python für Programmiereinsteiger Last-Minute-Seminare, noch freie Plätze XML Einführung und Grundlagen03.08.-05.08.2020 XML, XSLT, XPath, XSL-FO Einführung17.08.-19.08.2020 Python für Programmiereinsteiger07.09.-09.09.2020

XPROC * XSL-FO * SVG * XML * XML-SCHEMA * XPATH * XSL * XSLT 1.0 * XSLT 2.0 * XSLT 3.0 * XQUERY * ANT



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.

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.






Vielen Dank für Ihr Interesse an meiner Arbeit.



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

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XSD_Java.html