如何使用RELAX NG模式和JAXP验证XML文档?

如何使用RELAX NG模式和JAXP验证XML文档?,第1张

如何使用RELAX NG模式和JAXP验证XML文档?

请参阅Stefan Bodewig在2008年3月7日撰写的标题为XMLUnit中的RELAX NG
Validation
的Weblog

从昨晚开始,XMLUnit的主干包含一个基于Javax.xml.validation的新Validator类,该类是JAXP 1.3(即Java5
+)的一部分。

据我所知,没有开箱即用的JAXP实现支持RELAX NG。Sun自己的JAXP 1.4(Java6
+)肯定没有。经过一番搜索,我来到了川口浩辅的博客,鉴于他在JAXP,Sun的Multi Schema
Validator,isorelax等方面的工作,他应该知道。

使用他的isorelax-bridge和Jing并没有使我在Java6上获得任何帮助。我回到了河口晃介的文章并阅读了以下注释:由于Java6更改了SchemaFactory查找算法,因此该桥不适用于Java6。好了,改用Java5-进展,我现在在Jing内部的某个地方得到了NullPointerException,因此至少它正在加载工厂。接下来,我用MSV替换了Jing(现在在这里,无论有多少链接将您带到Sun的WebServices堆栈页面,对于“良好的URL永远不变”来说,太多了​​),实际上,我的简化测试通过了。

因此,您可能需要跳过一些步骤才能在JAXP设置中获得RELAX NG支持-
在我的情况下,Java5,MSV和Kawaguchi的网桥也能正常工作,但注释表明它也应与Java6兼容-
但一旦您成功配置了所有功能正确地说,现在可以使用XMLUnit来声明您在单元测试中文档的有效性。不过,似乎它不适用于紧凑语法。

要阅读川口浩辅博客上的评论,您必须使用archive.org,因为它们现在已经消失了:

Java 5将服务提供者文件解释为键/值对的列表,这违反了Java 5和6 JAR文件规范,但恰好与您的示例匹配。

Java
6按照指定的方式解析服务提供者文件,即。作为标准类名的列表,但是由于服务提供程序文件的内容无效,因此无法实例化适配器的SchemaFactory。

为了与Java 5和Java 6兼容而不必更改JAXP-JARV-adapter
JAR文件,可以简单地添加另一个包含正确的javax.xml.validation.SchemaFactory服务提供者文件的JAR文件。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5055360.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存