From f7c0168371d4a5eb4f2d45e84bc47e835d9f15e0 Mon Sep 17 00:00:00 2001
From: Andreas Romeyke <andreas.romeyke@slub-dresden.de>
Date: Tue, 18 Jul 2023 14:45:10 +0200
Subject: [PATCH] - use external error handler

---
 .../plugin/Validation/SLUBValidateDTD.java    | 49 ++++++-------------
 .../plugin/Validation/SLUBValidateSchema.java | 29 ++---------
 2 files changed, 19 insertions(+), 59 deletions(-)

diff --git a/java/org/slub/rosetta/dps/repository/plugin/Validation/SLUBValidateDTD.java b/java/org/slub/rosetta/dps/repository/plugin/Validation/SLUBValidateDTD.java
index 5ab4812..c7481d8 100644
--- a/java/org/slub/rosetta/dps/repository/plugin/Validation/SLUBValidateDTD.java
+++ b/java/org/slub/rosetta/dps/repository/plugin/Validation/SLUBValidateDTD.java
@@ -1,9 +1,7 @@
 package org.slub.rosetta.dps.repository.plugin.Validation;
 
+import org.slub.rosetta.dps.repository.plugin.SLUBXmlErrorHandler;
 import org.slub.rosetta.dps.repository.plugin.ValidationCatalogResolver;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
 
 import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilder;
@@ -11,36 +9,15 @@ import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
 
 public class SLUBValidateDTD {
-    private boolean is_valid = true;
-    private final List<String> errors = new ArrayList<>();
-    public List<String> get_errors() {
-        return errors;
-    }
     private final ValidationCatalogResolver validationCatalogResolver;
+    private final SLUBXmlErrorHandler slubXmlErrorHandler;
 
-    public SLUBValidateDTD(ValidationCatalogResolver catalogResolver) {
+    public SLUBValidateDTD(ValidationCatalogResolver catalogResolver, SLUBXmlErrorHandler slubXmlErrorHandler) {
         this.validationCatalogResolver = catalogResolver;
+        this.slubXmlErrorHandler = slubXmlErrorHandler;
     }
-    private final ErrorHandler validationErrorHandler = new ErrorHandler() {
-        @Override
-        public void warning(SAXParseException e) {
-            errors.add("[WW] "+ e.getMessage());
-        }
-        @Override
-        public void error(SAXParseException e) {
-            is_valid = false;
-            errors.add("[EE] "+e.getMessage() + "  line=" + e.getLineNumber() + " col=" + e.getColumnNumber());
-        }
-        @Override
-        public void fatalError(SAXParseException e) {
-            is_valid = false;
-            errors.add("[EE] Fatal, "+e.getMessage() + "  line=" + e.getLineNumber() + " col=" + e.getColumnNumber());
-        }
-    };
     private final DocumentBuilderFactory dbf = DocumentBuilderFactory.newDefaultNSInstance();
     public boolean validateAgainst(String filePath) throws IOException, ParserConfigurationException {
             dbf.setValidating(true);
@@ -49,19 +26,23 @@ public class SLUBValidateDTD {
             //dbf.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); // MATHML 2.0 triggers an error if enabled
             dbf.setAttribute(XMLConstants.FEATURE_SECURE_PROCESSING, true);
             dbf.setIgnoringElementContentWhitespace(true);
-            dbf.setValidating(true);
-
+            dbf.setNamespaceAware(true);
             DocumentBuilder dbValidate = dbf.newDocumentBuilder();
+            assert(dbValidate.isValidating());
             //reportDetail("align entitity resolver");
             dbValidate.setEntityResolver(validationCatalogResolver);
-            dbValidate.setErrorHandler(validationErrorHandler);
+            dbValidate.setErrorHandler(slubXmlErrorHandler);
+
             //reportDetail("reparse using own catalog");
+
         try {
             dbValidate.parse(new File(filePath));
-        } catch ( SAXException e ) {
-            errors.add( e.getMessage());
-            is_valid = false;
+        //} catch (SAXException e) {
+        } catch (Exception e) {
+            System.out.println("ERROR: " + e.getMessage());
         }
-        return is_valid;
+        return slubXmlErrorHandler.is_Valid();
+
     }
+
 }
diff --git a/java/org/slub/rosetta/dps/repository/plugin/Validation/SLUBValidateSchema.java b/java/org/slub/rosetta/dps/repository/plugin/Validation/SLUBValidateSchema.java
index c690173..7a4c933 100644
--- a/java/org/slub/rosetta/dps/repository/plugin/Validation/SLUBValidateSchema.java
+++ b/java/org/slub/rosetta/dps/repository/plugin/Validation/SLUBValidateSchema.java
@@ -3,9 +3,7 @@ package org.slub.rosetta.dps.repository.plugin.Validation;
 import org.apache.xerces.jaxp.validation.XMLSchemaFactory;
 import org.slub.rosetta.dps.repository.plugin.ValidationResourceResolver;
 import org.w3c.dom.Node;
-import org.xml.sax.ErrorHandler;
 import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
 
 import javax.xml.XMLConstants;
 import javax.xml.transform.dom.DOMSource;
@@ -14,35 +12,14 @@ import javax.xml.validation.SchemaFactory;
 import javax.xml.validation.Validator;
 import java.io.IOException;
 import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
 
 public class SLUBValidateSchema {
-    private boolean is_valid = true;
-    private final List<String> errors = new ArrayList<>();
-    public List<String> get_errors() {
-        return errors;
-    }
+
     private ValidationResourceResolver validationResourceResolver;
     public SLUBValidateSchema(ValidationResourceResolver validationResourceResolver) {
         this.validationResourceResolver = validationResourceResolver;
     }
-    private final ErrorHandler validationErrorHandler = new ErrorHandler() {
-        @Override
-        public void warning(SAXParseException e) {
-            errors.add("[WW] "+ e.getMessage());
-        }
-        @Override
-        public void error(SAXParseException e) {
-            is_valid = false;
-            errors.add("[EE] "+e.getMessage() + "  line=" + e.getLineNumber() + " col=" + e.getColumnNumber());
-        }
-        @Override
-        public void fatalError(SAXParseException e) {
-            is_valid = false;
-            errors.add("[EE] Fatal, "+e.getMessage() + "  line=" + e.getLineNumber() + " col=" + e.getColumnNumber());
-        }
-    };
+
     public  boolean validateAgainst(Node docvalidate, URI xsdUri) throws IOException {
         boolean isValidXml = false;
         try {
@@ -60,12 +37,14 @@ public class SLUBValidateSchema {
             isValidXml = true;
         } catch (SAXException e) {
             System.out.println( e.getMessage() );
+            /*
             errors.add( e.getMessage() );
             if (e.getMessage().contains("Premature end of file")) {
                 errors.add("Hint: if a 'premature end of file' error occured the reason could be:");
                 errors.add("      * the URL is moved permanently or");
                 errors.add("      * protocol is changed from http to https!");
             }
+             */
             e.printStackTrace();
         }
         return isValidXml;
-- 
GitLab