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

- encapsulating debug output

- refactoring, moved printXMLinfo() to XmlInfoRecord
parent 1467f573
No related branches found
No related tags found
No related merge requests found
......@@ -49,7 +49,7 @@ import java.util.Optional;
*/
public class SLUBXmlFormatValidationPlugin implements FormatValidationPlugin {
private static final ExLogger log = ExLogger.getExLogger(SLUBXmlFormatValidationPlugin.class);
private boolean debug = false;
private boolean valid = false;
private boolean wellformed = false;
private static String namespaceSchemaMapFile = "";
......@@ -104,7 +104,9 @@ public class SLUBXmlFormatValidationPlugin implements FormatValidationPlugin {
private final ErrorHandler validationErrorHandler = new ErrorHandler() {
@Override
public void warning(SAXParseException e) {
if (debug) {
errors.add(e.getMessage());
}
}
@Override
......@@ -128,16 +130,18 @@ public class SLUBXmlFormatValidationPlugin implements FormatValidationPlugin {
* @param initp parameter map
*/
public void initParams(Map<String, String> initp) {
System.out.println( initp);
if (debug) {
System.out.println(initp);
}
String[] catalogs = new String[] {
initp.get("catalog").trim()
};
validationCatalogResolver = new ValidationCatalogResolver(catalogs, errors);
validationCatalogResolver = new ValidationCatalogResolver(catalogs, errors, debug);
namespaceSchemaMapFile = initp.get("schemacatalog").trim();
loadNamespaceSchemaMap();
}
private static xmlInfoRecord getXMLinfo(Document doc) {
private XmlInfoRecord getXMLinfo(Document doc) {
String namespaceURI = doc.getNamespaceURI();
String documentURI = doc.getDocumentURI();
String xmlVersion = doc.getXmlVersion();
......@@ -148,44 +152,36 @@ public class SLUBXmlFormatValidationPlugin implements FormatValidationPlugin {
publicId = docType.getPublicId();
systemId = docType.getSystemId();
}
if (null == namespaceURI) { /* ugly hackm but works */
if (null == namespaceURI) { /* ugly hack but works */
namespaceURI = doc.getDocumentElement().getNamespaceURI();
}
return new xmlInfoRecord(namespaceURI, documentURI, xmlVersion, systemId, publicId);
}
private void printXMLinfo(Document doc) {
xmlInfoRecord info = getXMLinfo(doc);
System.out.println(
"\n-------------------------------------------"
+ "\n namespaceuri= " + info.nameSpaceUri
+ "\n documenturi = " + info.documentUri
+ "\n xmlVersion = " + info.xmlVersion
+ "\n systemID = " + info.systemID
+ "\n publicID = " + info.publicID
+ "\n"
);
return new XmlInfoRecord(namespaceURI, documentURI, xmlVersion, systemId, publicId);
}
private Optional<ValidationSchema> assignSchema(Document doc) {
xmlInfoRecord info = getXMLinfo(doc);
XmlInfoRecord info = getXMLinfo(doc);
Optional<ValidationSchema> optEle = Optional.empty();
if (null == info.nameSpaceUri) {
/* try if a DTD is assignable */
var type = assignDtdIfApplicable(doc);
if (type.equals(ValidationSchemaType.dtd)) {
System.out.println("found schema " + type);
if (debug) {
System.out.println("found schema " + type);
}
var ele = new ValidationSchema(null, type, info.systemID);
optEle = Optional.of(ele);
}
} else {
System.out.println("check info.nameSpaceUri=" + info.nameSpaceUri);
var it = namespaceSchemaMap.iterator();
System.out.println("map size=" + namespaceSchemaMap.size());
while (it.hasNext()){
ValidationSchema v = it.next();
System.out.println(v.schemaURL);
System.out.println(v.nameSpace);
System.out.println(v.schemaType);
if (debug) {
System.out.println("check info.nameSpaceUri=" + info.nameSpaceUri);
var it = namespaceSchemaMap.iterator();
System.out.println("map size=" + namespaceSchemaMap.size());
while (it.hasNext()) {
ValidationSchema v = it.next();
System.out.println(v.schemaURL);
System.out.println(v.nameSpace);
System.out.println(v.schemaType);
}
}
optEle = namespaceSchemaMap.stream()
.filter(
......@@ -193,12 +189,14 @@ public class SLUBXmlFormatValidationPlugin implements FormatValidationPlugin {
)
.findAny();
}
if ( optEle.isPresent() ) {
System.out.println("found namespace " + optEle.get().nameSpace );
System.out.println("found schematype " + optEle.get().schemaType );
System.out.println("found schemaURL " + optEle.get().schemaURL );
} else {
System.out.println("no element found");
if (debug) {
if (optEle.isPresent()) {
System.out.println("found namespace " + optEle.get().nameSpace);
System.out.println("found schematype " + optEle.get().schemaType);
System.out.println("found schemaURL " + optEle.get().schemaURL);
} else {
System.out.println("no element found");
}
}
return optEle;
}
......@@ -224,9 +222,13 @@ public class SLUBXmlFormatValidationPlugin implements FormatValidationPlugin {
assert(dbf.isValidating());
dbf.setFeature(XMLConstants.USE_CATALOG, true);
dbf.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
System.out.println("-> dtd detected, use catalog");
if (debug) {
System.out.println("-> dtd detected, use catalog");
}
} else if (!schema.get().schemaURL.isBlank()) {
System.out.println("-> set schema to " + schema.get().schemaURL);
if (debug) {
System.out.println("-> set schema to " + schema.get().schemaURL);
}
dbf.setSchema(schema.get().schemaInst);
assert(dbf.getSchema() != null);
}
......@@ -241,40 +243,42 @@ public class SLUBXmlFormatValidationPlugin implements FormatValidationPlugin {
reportError("not a XML file, " + e.getMessage(), filePath);
e.getStackTrace();
}
// debug
System.out.println("errors:" );
System.out.println("----");
for (var line: errors) {
System.out.println("\t" + line);
if (debug) {
// debug
System.out.println("errors:");
System.out.println("----");
for (var line : errors) {
System.out.println("\t" + line);
}
System.out.println("----");
}
System.out.println("----");
return valid;
}
private static ValidationSchemaType assignDtdIfApplicable(Document doc) {
private ValidationSchemaType assignDtdIfApplicable(Document doc) {
ValidationSchemaType result = ValidationSchemaType.nothing;
var info = getXMLinfo(doc);
if (null != info.systemID && info.systemID.endsWith(".dtd")) {
return ValidationSchemaType.dtd;
} else if (null != info.systemID ) {
result = ValidationSchemaType.dtd;
} else if (null != info.systemID) {
if (debug) {
System.out.println("no dtd applicable");
}
}
return ValidationSchemaType.nothing;
return result;
}
private boolean checkIfWellformed(Document doc) throws ParserConfigurationException, IOException, SAXException {
/* detect XML type via NS */
boolean isWellformedXml = false;
xmlInfoRecord info = getXMLinfo(doc);
XmlInfoRecord info = getXMLinfo(doc);
reportDetail("detect XML type via NS:" + info.nameSpaceUri);
/* TODO: align corresponding Schema based on systemID */
printXMLinfo(doc);
/* align corresponding Schema based on systemID */
info.printXMLinfo();
if (!info.xmlVersion.equals("1.0")) {
reportError("not an expected XML 1.0 document, found " + info.xmlVersion);
} else {
isWellformedXml = true;
reportDetail("checked XML is wellformed");
}
return isWellformedXml;
}
......@@ -285,8 +289,7 @@ public class SLUBXmlFormatValidationPlugin implements FormatValidationPlugin {
//dbf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File(filePath));
return doc;
return db.parse(new File(filePath));
}
private boolean validateAgainstSchema(String filePath) throws ParserConfigurationException, SAXException, IOException {
......@@ -310,7 +313,9 @@ public class SLUBXmlFormatValidationPlugin implements FormatValidationPlugin {
private void reportError(String msg) {
errors.add(msg);
System.out.println("ERROR: " + msg);
if (debug) {
System.out.println("ERROR: " + msg);
}
// TODO: log.warn(msg);
}
private void reportError(String msg, String filepath) {
......@@ -355,6 +360,7 @@ public class SLUBXmlFormatValidationPlugin implements FormatValidationPlugin {
Map<String, String> initp = new HashMap<>();
initp.put("catalog", "/etc/xml/catalog");
initp.put("schemacatalog", "example_catalog/schema_catalog.xml");
//initp.put("debug", "true");
plugin.initParams(initp);
System.out.println("----------------------------------");
System.out.println("Agent: '" + plugin.getAgent() + "'");
......
package org.slub.rosetta.dps.repository.plugin;
class xmlInfoRecord {
class XmlInfoRecord {
public final String nameSpaceUri;
public final String documentUri;
public final String xmlVersion;
public final String systemID;
public final String publicID;
public xmlInfoRecord(String nameSpaceUri, String documentUri, String xmlVersion, String systemID, String publicID) {
public XmlInfoRecord(String nameSpaceUri, String documentUri, String xmlVersion, String systemID, String publicID) {
this.documentUri = documentUri;
this.nameSpaceUri = nameSpaceUri;
this.xmlVersion = xmlVersion;
this.systemID = systemID;
this.publicID = publicID;
}
public void printXMLinfo() {
System.out.println(
"\n-------------------------------------------"
+ "\n namespaceuri= " + this.nameSpaceUri
+ "\n documenturi = " + this.documentUri
+ "\n xmlVersion = " + this.xmlVersion
+ "\n systemID = " + this.systemID
+ "\n publicID = " + this.publicID
+ "\n"
);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment