所以我一直在寻找一个线程安全的Java XML Validator,但似乎没有:
SchemFactory
- 记录为非线程安全的
Validator
- 记录为非线程安全的
Schema
- 记录为线程安全,but actually isn't
javax
实施后还有什么?请注意,我位于Java 5
之下,无法使用任何Guava
库或apache-commons
以外的任何内容,我已经探索并发现了the Validator framework,但我不确定这是实际上是线程安全的,因为它说如下:
如果当前ValidatorResources相同,只要您已完成任何先前的验证,并且您不尝试一次使用多个线程中的特定Validator实例,则可以安全地重用Validator实例。
我认为这意味着只要我的每个线程都有一个实例,那么我们就可以开展业务了。
但我还有其他选择吗,我错过了一些明显的选择?
答案 0 :(得分:1)
使用内置的多个实例。非线程安全只意味着您无法同时在多个线程之间共享实例(SimpleDateFormat
和Random
是很好的例子)。
您还可以使用ThreadLocal
为每个线程提供自己的实例(而不是创建自己的“解决方案”)。
答案 1 :(得分:0)
对于Schema而言,重要的是线程安全,因此您可以编译一次架构并在多个线程中重复使用它。您建议Xerces架构声称是线程安全的而不是:这将是一个问题。
验证程序对线程安全并不重要,因为每次验证实例文档时都应该创建一个新的验证程序。
要记住的另一件事是JAXP与DOM密切相关,而DOM不是线程安全的。这可能是个大问题。
至于你的问题,是否有另一种选择,答案是肯定的:Saxon-EE提供了一个替代的XSD验证引擎,在编译的模式和实例文档上都具有完全的线程安全性。