Java 5中的线程安全XML验证

时间:2015-08-20 08:40:17

标签: java xml multithreading xml-validation java-5

所以我一直在寻找一个线程安全的Java XML Validator,但似乎没有:

SchemFactory - 记录为非线程安全的

Validator - 记录为非线程安全的

Schema - 记录为线程安全,but actually isn't

javax实施后还有什么?请注意,我位于Java 5之下,无法使用任何Guava库或apache-commons以外的任何内容,我已经探索并发现了the Validator framework,但我不确定这是实际上是线程安全的,因为它说如下:

  

如果当前ValidatorResources相同,只要您已完成任何先前的验证,并且您不尝试一次使用多个线程中的特定Validator实例,则可以安全地重用Validator实例。

我认为这意味着只要我的每个线程都有一个实例,那么我们就可以开展业务了。

但我还有其他选择吗,我错过了一些明显的选择?

2 个答案:

答案 0 :(得分:1)

使用内置的多个实例。非线程安全只意味着您无法同时在多个线程之间共享实例(SimpleDateFormatRandom是很好的例子)。

您还可以使用ThreadLocal为每个线程提供自己的实例(而不是创建自己的“解决方案”)。

答案 1 :(得分:0)

对于Schema而言,重要的是线程安全,因此您可以编译一次架构并在多个线程中重复使用它。您建议Xerces架构声称是线程安全的而不是:这将是一个问题。

验证程序对线程安全并不重要,因为每次验证实例文档时都应该创建一个新的验证程序。

要记住的另一件事是JAXP与DOM密切相关,而DOM不是线程安全的。这可能是个大问题。

至于你的问题,是否有另一种选择,答案是肯定的:Saxon-EE提供了一个替代的XSD验证引擎,在编译的模式和实例文档上都具有完全的线程安全性。