Axis2生成的存根是线程安全的吗?


问题内容

Axis2从WSDL生成的客户端存根是否是线程安全的?

当然,“线程安全”并不是严格定义的术语,因此我至少对以下内容感兴趣:

同一个存根类的 不同 实例是否可以由不同线程同时访问,并且具有与单线程执行相同的有效行为?

同一存根类的 单个 实例是否可以由不同的线程并发地以相同的有效行为与相同的调用以某种任意方式在单线程执行中交织在一起?

您可能还希望使用这里描述的术语(和起源于此)来更精确地进行讨论。


问题答案:

我不确定axis2,但是至少axis1会生成非线程安全的客户端存根。我给其他SOAP客户端几乎都是非线程安全的印象。如果我没记错的话,问题是客户端存根以非线程安全的方式使用XML解析库。

但是,使用apache commons-pooling合并实例并一次使用一个线程中的每个实例效果很好。

更新:对于Axis2,请参阅https://issues.apache.org/jira/browse/AXIS2-4357(声称Axis2并非出于线程安全原因,设计使然)