使用 dom4j DOMDocument 来提供 validator.validate(DOMSource) 在 java 1.6 中失败(xsi:noNamespaceSchemaLocation 不允许出现在根元素中),在 1.5 中有效
我发现以下问题非常棘手(好吧,这是轻描淡写) - 任何见解将不胜感激。目前似乎最好的主意是放弃 dom4j 以支持 XOM(http://stackoverflow.com/questions/831865/what-java-xml-library-do-you-recommend-to-replace-dom4j)。
我一直在验证从 dom4j 'new DOMDocument()' 创建的内存 XML - 但这不适用于 Java 6。
以下对 dom4j (1.6.1) DOMDocument 派生的 DOMSource 的 validate(source) 调用适用于 Java 1.5.x,但在 Java 1.6.x 中失败:
public void validate() throws Exception {
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
schemaFactory.setErrorHandler(null);
Schema schemaXSD = schemaFactory.newSchema(new URL(getSchemaURLString()));
Validator validator = schemaXSD.newValidator();
DOMSource source = new DOMSource(getDocument());
validator.validate(source);
}
Run Code Online (Sandbox Code Playgroud)
getSchemaURLString() 也用于在根节点添加 xsi:noNamespaceSchemaLocation 属性,即: xsi:noNamespaceSchemaLocation="http://localhost:8080/integration/xsd/fqlResponseSchema-2.0.xsd"
异常如下:
Exception: org.xml.sax.SAXParseException: cvc-complex-type.3.2.2: Attribute 'xsi:noNamespaceSchemaLocation' …Run Code Online (Sandbox Code Playgroud)