2012-10-21 5 views
5

Ich versuche, XML-Dateien mit Standard-Java-Bibliotheken zu validieren und den obigen Fehler zu erhalten. Meine XSD-Datei test1.xsdXSD-Ü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).

Antwort

10

ich es verfolgen inkompatible Versionen von Xerces nach unten, von anderer Software enthalten. Das Erzwingen der späteren Versionen von Xerces behebt das Problem.

1

Ich denke, dass Ihre XSD-Datei nicht über InputStream SCHEMA_STREAM = getClass().getResourceAsStream(SCHEMA_PATH); zugänglich ist. zugänglich.

Ich validiere den Code und XSD Datei mit nur geänderte Zeile wie folgt. Es lief ohne Probleme in JDK 1.6 und JDK 1.7.

  InputStream SCHEMA_STREAM = new FileInputStream(new File(SCHEMA_PATH)); 

Wenn Datei nicht zugänglich war, bekam ich die NullPointerException wenig anders als unten:

 Exception in thread "main" org.xml.sax.SAXParseException: 
      schema_reference.4: Failed to read schema document 'null' 
+0

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) –

0

Haben Sie versucht, dies in XSD?

Für Attribute verwenden das Attribut use="optional"

Für Elemente verwenden das Attribut nillable="true" oder das minOccurs="0" Attribut

Representations of null in XML Schema

Verwandte Themen