我正在使用 jax-ws cxf 从 SOAP 接口加载文档。我可以通过 SoapUI (xop/multipart) 获得正确的文档。不幸的是,当我尝试通过代码加载附件时,CachedOutputStream
大于~210kb 的文件为空。
我尝试了什么:
- 为我的 WebServiceClient 激活 MTOMFeature
- 使用 JVM 参数
CachedOutputStream.Threshold
和CachedOutputStream.MaxSize
- 使用不同版本的 apache-cxf (
3.2.1
或3.1.14
)
调试时:
PhaseInterceptorChain#doIntercept
使用AttachmentInInterceptor
(at currentInterceptor.handleMessage(message);
) 加载附件LazyAttachmentCollection
并将其添加到消息中。
快乐的情况:文档被加载到 CachedOutputStream 并且在 for 循环之后可用。
错误情况(文件太大?):调用 currentInterceptor.handleMessage 后文档直接可用,但循环结束后文档消失
然而,在上述两种情况下,正确的 tmp 文件都会保存到我的磁盘中(与我的文档内容完全相同)。此外,即使循环完成,我也可以在这两种情况下加载该文件:
((org.apache.cxf.attachment.LazyAttachmentCollection)(message.getAttachments())).loadAll();