xml 使用 StAX 验证:无法识别 属性 'javax.xml.stream.isInterning'
xml validation with StAX: Unrecognized property 'javax.xml.stream.isInterning'
我正尝试在我们的 jboss 网络应用程序中使用 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, in newer versions of xerces the classes have been split out to a separate jar file: xml-apis.jar . I took the latest version of that file (1.4.01, dated December 2009) from the xerces homepage 并将其添加到 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);
我们找到了解决此问题的两种方法。
一个选项是将 XmlStreamReader 薄包装在一个新的 class 中,如果参数为 "javax.xml.stream.isInterning"
,它将忽略 getProperty
调用,否则将其委托。
另一种选择是改用 XmlEventReader,它的性能较低但无需自定义包装器即可工作。
我正尝试在我们的 jboss 网络应用程序中使用 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, in newer versions of xerces the classes have been split out to a separate jar file: xml-apis.jar . I took the latest version of that file (1.4.01, dated December 2009) from the xerces homepage 并将其添加到 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);
我们找到了解决此问题的两种方法。
一个选项是将 XmlStreamReader 薄包装在一个新的 class 中,如果参数为 "javax.xml.stream.isInterning"
,它将忽略 getProperty
调用,否则将其委托。
另一种选择是改用 XmlEventReader,它的性能较低但无需自定义包装器即可工作。