mda*_*win 6 java xml validation jboss
我正在尝试使用Staxin我们的jboss webapp进行xml验证.我已阅读此帖并按照示例进行操作.然后我看到以下异常:
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)
Run Code Online (Sandbox Code Playgroud)
根据这篇文章,这里的问题是jboss 5.0.1有一个旧版本的xerces.所以我通过替换现有的xercesImpl.jar将其升级到2.11.0 jboss-5.0.1.GA/lib/endorsed/.然后jboss将无法启动,因为以下错误:
NoClassDefFoundError: org/w3c/dom/ElementTraversal
Run Code Online (Sandbox Code Playgroud)
根据这篇文章,在较新版本的xerces中,类已被拆分为单独的jar文件:xml-apis.jar.我从xerces主页上获取了该文件的最新版本(1.4.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'
Run Code Online (Sandbox Code Playgroud)
似乎SO上没有存在涉及该属性的问题.当然,我不能成为唯一一个尝试在jboss 5上使用StAX进行xml验证的人?
或者我做了明显错误的事情?
代码段:
Validator validator = requestSchema.newValidator();
StAXSource source = new StAXSource(xmlsr); //an XMLStreamReader
validator.validate(source);
Run Code Online (Sandbox Code Playgroud)
我们找到了解决这个问题的两种方法。
一种选择是将 XmlStreamReader 薄层包装在一个新类中,getProperty如果参数为 ,则该类将忽略调用"javax.xml.stream.isInterning",否则将其委托。
另一种选择是使用 XmlEventReader,它的性能较低,但无需自定义包装器即可工作。