MTOM与SAAJ提供的附件功能有什么区别?

时间:2013-03-18 15:31:50

标签: soap jax-ws mtom saaj

SAAJ: SOAP with Attachments API for Java

MTOM: SOAP消息传输优化机制

我的简单理解:它们处理SOAP附件,MTOM是SAAJ的优化版本。它是否正确?

他们只是两种不同的方式做同样的事情吗?或者我想在这里比较苹果和橘子?

我可以一起使用SAAJ和MTOM吗?

1 个答案:

答案 0 :(得分:33)

有点复杂。 SAAJ是一个旧的Java API,用于操作SOAP信封,因此发送二进制附件可以以一种理智的方式完成(这不是消息体中的BASE64编码字符串)。 SAAJ是一种低级接口,您需要在代码中“手动”构造SOAP信封并为其添加附件。

如果您不需要使用遗留代码并且希望直接使用SOAP信封,那么请查看JAX-WS Dispatcher和Provider接口。

MTOM是另一头野兽。它不是一个完整的Web服务API - 它是发送附件的专门方式。任何“真正的”Web服务API(如JAX-WS或SAAJ)都可以使用它(如果您设法强制SAAJ以这种方式工作)。

与BASE64(具有大量开销)相比,MTOM(几乎)总是与XOP一起使用,这是一种更有效的二进制数据发送方式。附件作为MIME附件单独发送,并且MIME类型处理得当(以前是Java-Microsoft技术交互的问题)。

现在忘记了SAAJ,使用大多数JAX-WS实现提供的JAX-WS + MTOM支持。