使用StAX进行xml验证:无法识别的属性'javax.xml.stream.isInterning'

时间:2015-02-09 17:05:37

标签: java xml validation jboss

我正在尝试使用我们的jboss webapp中的StAX进行xml验证。我已阅读this post并按照示例进行操作。然后我看到了以下异常:

java.lang.IllegalArgumentException: Source parameter of type      
javax.xml.transform.stax.StAXSource' is not accepted by this validator.
at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)

根据this post,这里的问题是jboss 5.0.1有旧版本的xerces。所以我通过替换jboss-5.0.1.GA/lib/endorsed/下的现有xercesImpl.jar将其升级到2.11.0。然后由于以下错误,jboss无法启动:

NoClassDefFoundError: org/w3c/dom/ElementTraversal

根据this post,在较新版本的xerces中,类已被拆分为单独的jar文件:xml-apis.jar。我从the xerces homepage获取了该文件的最新版本(1。9。01,2009年12月),并将其添加到jboss-5.0.1.GA//lib/endorsed/ - 现在jboss开始正常。

到目前为止一切顺利。

但是当我尝试调用javax.xml.validation.Validator.validate()方法时,我现在看到以下错误:

java.lang.IllegalArgumentException: Unrecognized property 'javax.xml.stream.isInterning'

在SO上似乎没有涉及该属性的问题。当然,我不能成为唯一一个尝试在jboss 5上使用StAX进行xml验证的人吗?!

或者我做错了什么?

代码段:

 Validator validator = requestSchema.newValidator();  
 StAXSource source = new StAXSource(xmlsr);  //an XMLStreamReader
 validator.validate(source); 

1 个答案:

答案 0 :(得分:1)

我们找到了解决此问题的两种方法。

一个选项是将XmlStreamReader精简地包装在一个新类中,如果参数为getProperty,它将忽略"javax.xml.stream.isInterning"调用,否则委托它。

另一个选择是使用XmlEventReader,它性能较差,但不需要自定义包装器。