JAX-WS RI 不从客户端流式传输数据

JAX-WS RI does not stream data from client

我用 JAX-WS 注册机编写了一个简单的上传服务。 类 由 XJC 使用 DataHandler 类型生成。在编码时 @MTOM@StreamingAttachment 被添加到服务实现中。现在,当一个客户端,一个 .NET 客户端,使用 MTOM multipart/related 发送上传的数据并接收到数据时,但数据处理程序中的数据源是 com.sun.istack.ByteArrayDataSourcejava.io.ByteArrayInputStream。这意味着来自客户端的流被完全消耗到内存中。对于更大的文件,内存会爆炸。

经过一些谷歌搜索研究后,除了一些我没有的关于 SOAP 处理程序的 SO 问题外,我什么都没发现。还没有成功。

我启动了调试会话,发现内部数据包含在 StreamingDataHandler 中,这是推荐的方式,但 MtomCodec queries the length of the attachment and causes the underlying data object to fully consume the input stream into memory。故事结束。

这对我来说似乎是脑残,因为 MTOM 的整个优化完全消失了。

有人知道解决这个问题的方法吗?不然整个 JAX-WS RI 的方法好像都没用,只好求助于 REST。

这可能与 MTOM not working when using SOAPHandler 重复。结果一样。

对于它的价值,我在:

在进一步的调试会话和网络搜索之后,我发现了几个 JIRA 问题和博客文章,表明它在 JAX-WS RI 中是完全错误的。一旦你有了一个处理程序,你就迷路了。这适用于传出但尤其适用于传入流。

最后,JAX-WS RI 无法使用 进行文件交互。我必须在某个时候评估 Apache CXF。