2015-02-09 407 views
6

我正在尝试使用StAX在我们的jboss webapp中使用xml验证。我读过this post并遵循了这个例子。然后我看到以下异常:使用StAX进行xml验证:无法识别的属性'javax.xml.stream.isInterning'

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获取该文件的最新版本(2009年12月的1.4.01),并将其添加到jboss-5.0.1.GA//lib/endorsed/ - 现在jboss开始正常工作。

到目前为止这么好。

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

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

人们似乎对所以没有存在的问题是指该属性。当然,我不能成为唯一一个在jboss 5上使用StAX进行xml验证的人!

或者我在做什么明显错误?

代码片段:

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

从它的要点,如果我没有弄错你正在使用的库有一个 javax.xml.stream.XMLStreamReader没有属性“isinterning”的废弃版本。希望这会有所帮助,因为我真的不知道哪个jar会将这个类引入到您的具体情况中。 – witchedwiz 2015-06-14 18:49:24

回答

1

我们发现了两个解决问题的对策。

一种选择是将XmlStreamReader简化为一个新类,如果参数是"javax.xml.stream.isInterning",将忽略getProperty调用,否则委托它。

另一种选择是使用XmlEventReader,而不是使用自定义包装器,但它的性能较差。