Ich habe die folgende Klasse:XML-Validierung mit XSD in Java
package com.somedir.someotherdir;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
public class SchemaValidator
{
private static Logger _logger = Logger.getLogger(SchemaValidator.class.getName());
/**
* @param file - the relative path to and the name of the XML file to be validated
* @return true if validation succeeded, false otherwise
*/
public final static boolean validateXML(String file)
{
try
{
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema();
Validator validator = schema.newValidator();
validator.validate(new StreamSource(file));
return true;
}
catch (Exception e)
{
_logger.log(Level.WARNING, "SchemaValidator: failed validating " + file + ". Reason: " + e.getMessage(), e);
return false;
}
}
}
Ich mag würde wissen, ob ich schema.newValidator("dir/to/schema.xsd")
schließlich verwenden soll oder ist die aktuelle Version in Ordnung? Ich habe gelesen, dass es eine DoS-Schwachstelle gibt, vielleicht könnte jemand mehr Informationen dazu liefern? Muss der Pfad absolut oder relativ sein?
Die meisten der zu validierenden XMLs haben jeweils ihre eigene XSD, daher würde ich gerne das Schema lesen, das im XML selbst erwähnt wird (xs:noNamespaceSchemaLocation="schemaname.xsd"
).
Die Validierung wird nur während des Starts oder manuellen Neuladens (Serversoftware) durchgeführt.
Konnten Sie Leute stoppen, meinen Code neu zu formatieren und einige Antworten zu geben ?? – jurchiks
"Die meisten der zu validierenden XMLs haben jeweils ihre eigene XSD, deshalb würde ich gerne das Schema lesen, das im XML selbst erwähnt wird", vielleicht hängt das zusammen: http://stackoverflow.com/questions/2829105/validating -xml-mit-multiple-xsds-in-java – Cephalopod
Verwandt vielleicht, aber nicht was ich brauche.Ich muss es nur bestätigen und ich frage, ob DIESE Weise gut ist oder ob es irgendwelche Korrekturen benötigt. Dein Code benötigt mehr Klassen/Methoden als nur diesen und das ist nicht genau das, wonach ich suche. – jurchiks