我正在尝试验证我使用本地架构创建的一个xml,但是有些怪异的错误正在抛出。我的代码:
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
factory.setSchema(schemaFactory.newSchema(
new Source[] {new StreamSource("\\.\\schema\\xsd_me_ene_diaria.xsd")}));
我的堆栈跟踪如下。
java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"
at javax.xml.parsers.SAXParserFactory.setSchema(Unknown Source)
at SaxValidacao.validateSchema(SaxValidacao.java:36)
在调用setSchema之后抛出错误。
Java中的XML验证的一些线索或其他技巧?
答案 0 :(得分:3)
有时会发生的一件事是混合不同版本的解析器。如果使用java 5或更高版本,请尝试删除对任何外部xalan或xerces库的引用。 (处理xml所需的全部内容包含在java 5的标准发行版中)
答案 1 :(得分:1)
您可以关闭验证并解析流吗?如果是,则不太可能是JAR冲突。
我认为您的问题是访问架构。
答案 2 :(得分:1)
可能的问题是您的JAXP解析器非常旧并且不支持setSchema方法。查看SAXParsesrFactory的javadoc。对于setSchema(和许多其他方法),它说:
<强>抛出:强>
java.lang.UnsupportedOperationException - 为了向后兼容,在早期版本的实现时 使用JAXP,这个例外会 被抛出。
检查您正在使用的解析器实现,并尝试更新到更新版本。
答案 3 :(得分:1)
我在CodeWall文章中找到了一个解决方案,在代码库中添加了一行Java代码。
System.setProperty("javax.xml.parsers.SAXParserFactory","com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl");
请参阅了解更多详情:https://coderwall.com/p/kqsrrw/jdom2-this-parser-does-not-support-specification-null-version-null