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