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

- use external error handler

parent bde7f178
No related branches found
No related tags found
No related merge requests found
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();
}
}
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment