XSD验证:此解析器不支持规范"null"版本"null"

pet*_*ust 6 java xsd

我正在尝试使用标准Java库验证XML文件并获得上述错误.我的XSD文件test1.xsd

<?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>
Run Code Online (Sandbox Code Playgroud)

使用代码(在Eclipse中作为Junit测试运行):

@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);
}
Run Code Online (Sandbox Code Playgroud)

错误是:

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)
Run Code Online (Sandbox Code Playgroud)

这个错误似乎从XML解析器的不兼容性(如Xerces的),以引起看到这个帖子,但我没有框架(比在Eclipse上和JUnit等).我的POM中没有明确的xerces.有一个简单的workround(我不介意我使用什么解析器,只要它验证).

pet*_*ust 12

我将其跟踪到Xerces的不兼容版本,包括在其他软件中.强制Xerces的更高版本解决了这个问题.