0

我正在使用 jax-ws cxf 从 SOAP 接口加载文档。我可以通过 SoapUI (xop/multipart) 获得正确的文档。不幸的是,当我尝试通过代码加载附件时,CachedOutputStream大于~210kb 的文件为空。

我尝试了什么

  • 为我的 WebServiceClient 激活 MTOMFeature
  • 使用 JVM 参数CachedOutputStream.ThresholdCachedOutputStream.MaxSize
  • 使用不同版本的 apache-cxf (3.2.13.1.14)

调试时

PhaseInterceptorChain#doIntercept使用AttachmentInInterceptor(at currentInterceptor.handleMessage(message);) 加载附件LazyAttachmentCollection并将其添加到消息中。

  1. 快乐的情况:文档被加载到 CachedOutputStream 并且在 for 循环之后可用。

  2. 错误情况(文件太大?):调用 currentInterceptor.handleMessage 后文档直接可用,但循环结束后文档消失

    然而,在上述两种情况下,正确的 tmp 文件都会保存到我的磁盘中(与我的文档内容完全相同)。此外,即使循环完成,我也可以在这两种情况下加载该文件:((org.apache.cxf.attachment.LazyAttachmentCollection)(message.getAttachments())).loadAll();

4

1 回答 1

0

我对 apache-cxf 3.1.6 有类似的问题。问题是 102kB 以上的文件是空的。经过一番挖掘,它原来是你可以在requestContext中设置的“附件内存阈值”,由于某种原因文件缓存似乎不起作用。

于 2020-01-20T11:52:33.497 回答