使用Woodstox和Spring-WS

use*_*556 1 xml spring-ws jaxb2 woodstox

当Spring-WS与JAXB一起用于编组和解组时,内部使用哪种流实现?

response = (AResponse) webSvcTemplate.marshalSendAndReceive(request);
Run Code Online (Sandbox Code Playgroud)

阅读SO查询,发现Woodstox比JAXB更快.但是,当我使用Spring-WS时,Spring实际上会处理编组和解组时发生的所有事情.

问题是如何强制Spring-WS使用Woodstox流API?

Arj*_*sma 5

当Spring-WS与JAXB一起用于编组和解组时,内部使用哪种流实现?

这取决于WebServiceMessageFactory你启用了哪个.默认情况下,Spring-WS使用SAAJ(即SaajSoapMessageFactory),它基于DOM,并且根本不进行任何流式传输,因为整个XML结构存储在内存中.您可以从SAAJ切换到Axiom(即AxiomSoapMessageFactory),它确实执行基于StAX的流式传输.请参阅参考文档.

阅读SO查询,发现Woodstox比JAXB更快.

这实际上取决于上下文:消息的大小,您正在运行的硬件等.从个人经验来看,我发现对于"小"到"中"大小的SOAP消息,流式传输速度并不快.

此外,您在这里比较苹果和橙子:Woodstox是一个StAX实现,一个XML解析器.JAXB是一个编组库,它使用像StAX(还有SAX和DOM)这样的解析器从XML构建Java对象.

但是,当我使用Spring-WS时,Spring实际上会处理编组和解组时发生的所有事情.

不是很棒吗?;)

问题是如何强制Spring-WS使用Woodstox流API?

简单地将Woodstox放在类路径上就足够了,Spring-WS会自动启动它.你必须切换到Axiom(见上文),然后才能发现任何差异.即便如此,我也会打赌,性能差异并不大.