Ich versuche, XML-Dateien mit Standard-Java-Bibliotheken zu validieren und den obigen Fehler zu erhalten. Meine XSD-Datei test1.xsd
XSD-Überprüfung: Dieser Parser unterstützt keine Spezifikation "null" Version "null"
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="foo">
<xsd:attribute name="bar" type="xsd:string" />
</xsd:complexType>
</xsd:schema>
mit Code ist (läuft als JUnit-Test in Eclipse):
@Test
public void testValidatingParser1() throws Exception {
String SCHEMA_PATH = "test1.xsd";
InputStream SCHEMA_STREAM = getClass().getResourceAsStream(SCHEMA_PATH);
StreamSource SCHEMA_SOURCE = new StreamSource(SCHEMA_STREAM);
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(SCHEMA_SOURCE);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setSchema(schema);
}
Der Fehler ist:
java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"
at javax.xml.parsers.DocumentBuilderFactory.setSchema(Unknown Source)
at org.xmlcml.graphics.misc.SchemaTest.testValidatingParser1(SchemaTest.java:123)
Dieser Fehler scheint von Inkompatibilitäten mit XML stammend Parser (wie Xerces) siehe this post, aber ich habe keine Frameworks (außer Eclipse und Junit). Ich habe keine expliziten Xerces in meinem POM. Gibt es eine einfache Workround (ich habe nichts dagegen, welchen Parser ich verwende, solange er validiert).
danke für diesen Vorschlag, aber die XSD-Datei wird in meiner Instanz gelesen (wenn ich es bearbeiten, um nicht konform zu sein, wird es fehlschlagen) –