尝试在Java中验证XML时出错

时间:2010-07-27 21:43:22

标签: java xml validation xsd

我正在尝试验证我使用本地架构创建的一个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验证的一些线索或其他技巧?

4 个答案:

答案 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