Skip to content
Snippets Groups Projects
Commit f7c01683 authored by Andreas Romeyke's avatar Andreas Romeyke
Browse files

- use external error handler

parent bde7f178
Branches
Tags
No related merge requests found
package org.slub.rosetta.dps.repository.plugin.Validation; 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.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.XMLConstants;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
...@@ -11,36 +9,15 @@ import javax.xml.parsers.DocumentBuilderFactory; ...@@ -11,36 +9,15 @@ import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class SLUBValidateDTD { 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 ValidationCatalogResolver validationCatalogResolver;
private final SLUBXmlErrorHandler slubXmlErrorHandler;
public SLUBValidateDTD(ValidationCatalogResolver catalogResolver) { public SLUBValidateDTD(ValidationCatalogResolver catalogResolver, SLUBXmlErrorHandler slubXmlErrorHandler) {
this.validationCatalogResolver = catalogResolver; 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(); private final DocumentBuilderFactory dbf = DocumentBuilderFactory.newDefaultNSInstance();
public boolean validateAgainst(String filePath) throws IOException, ParserConfigurationException { public boolean validateAgainst(String filePath) throws IOException, ParserConfigurationException {
dbf.setValidating(true); dbf.setValidating(true);
...@@ -49,19 +26,23 @@ public class SLUBValidateDTD { ...@@ -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("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.setAttribute(XMLConstants.FEATURE_SECURE_PROCESSING, true);
dbf.setIgnoringElementContentWhitespace(true); dbf.setIgnoringElementContentWhitespace(true);
dbf.setValidating(true); dbf.setNamespaceAware(true);
DocumentBuilder dbValidate = dbf.newDocumentBuilder(); DocumentBuilder dbValidate = dbf.newDocumentBuilder();
assert(dbValidate.isValidating());
//reportDetail("align entitity resolver"); //reportDetail("align entitity resolver");
dbValidate.setEntityResolver(validationCatalogResolver); dbValidate.setEntityResolver(validationCatalogResolver);
dbValidate.setErrorHandler(validationErrorHandler); dbValidate.setErrorHandler(slubXmlErrorHandler);
//reportDetail("reparse using own catalog"); //reportDetail("reparse using own catalog");
try { try {
dbValidate.parse(new File(filePath)); dbValidate.parse(new File(filePath));
} catch ( SAXException e ) { //} catch (SAXException e) {
errors.add( e.getMessage()); } catch (Exception e) {
is_valid = false; System.out.println("ERROR: " + e.getMessage());
} }
return is_valid; return slubXmlErrorHandler.is_Valid();
} }
} }
...@@ -3,9 +3,7 @@ package org.slub.rosetta.dps.repository.plugin.Validation; ...@@ -3,9 +3,7 @@ package org.slub.rosetta.dps.repository.plugin.Validation;
import org.apache.xerces.jaxp.validation.XMLSchemaFactory; import org.apache.xerces.jaxp.validation.XMLSchemaFactory;
import org.slub.rosetta.dps.repository.plugin.ValidationResourceResolver; import org.slub.rosetta.dps.repository.plugin.ValidationResourceResolver;
import org.w3c.dom.Node; import org.w3c.dom.Node;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import javax.xml.XMLConstants; import javax.xml.XMLConstants;
import javax.xml.transform.dom.DOMSource; import javax.xml.transform.dom.DOMSource;
...@@ -14,35 +12,14 @@ import javax.xml.validation.SchemaFactory; ...@@ -14,35 +12,14 @@ import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator; import javax.xml.validation.Validator;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.util.ArrayList;
import java.util.List;
public class SLUBValidateSchema { 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; private ValidationResourceResolver validationResourceResolver;
public SLUBValidateSchema(ValidationResourceResolver validationResourceResolver) { public SLUBValidateSchema(ValidationResourceResolver validationResourceResolver) {
this.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 { public boolean validateAgainst(Node docvalidate, URI xsdUri) throws IOException {
boolean isValidXml = false; boolean isValidXml = false;
try { try {
...@@ -60,12 +37,14 @@ public class SLUBValidateSchema { ...@@ -60,12 +37,14 @@ public class SLUBValidateSchema {
isValidXml = true; isValidXml = true;
} catch (SAXException e) { } catch (SAXException e) {
System.out.println( e.getMessage() ); System.out.println( e.getMessage() );
/*
errors.add( e.getMessage() ); errors.add( e.getMessage() );
if (e.getMessage().contains("Premature end of file")) { 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("Hint: if a 'premature end of file' error occured the reason could be:");
errors.add(" * the URL is moved permanently or"); errors.add(" * the URL is moved permanently or");
errors.add(" * protocol is changed from http to https!"); errors.add(" * protocol is changed from http to https!");
} }
*/
e.printStackTrace(); e.printStackTrace();
} }
return isValidXml; return isValidXml;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment