【发布时间】:2018-01-29 16:48:19
【问题描述】:
我正在使用 jax-ws cxf 从 SOAP 接口加载文档。我可以通过 SoapUI (xop/multipart) 获得正确的文档。不幸的是,当我尝试通过代码加载附件时,对于大于 ~210kb 的文件,CachedOutputStream 为空。
我尝试了什么:
- 为我的 WebServiceClient 激活 MTOMFeature
- 使用 JVM 参数
CachedOutputStream.Threshold和CachedOutputStream.MaxSize - 使用不同版本的 apache-cxf(
3.2.1或3.1.14)
调试时:
PhaseInterceptorChain#doIntercept 使用AttachmentInInterceptor(currentInterceptor.handleMessage(message);)加载带有LazyAttachmentCollection 的附件并将其添加到邮件中。
-
快乐的情况:文档被加载到 CachedOutputStream 并且在 for 循环之后可用。
-
错误情况(文件太大?):调用currentInterceptor.handleMessage后文档直接可用,但循环结束后消失
然而,在上述两种情况下,正确的 tmp 文件都会保存到我的磁盘(与我的文档内容完全相同)。此外,即使循环结束,我也可以在这两种情况下加载该文件:
((org.apache.cxf.attachment.LazyAttachmentCollection)(message.getAttachments())).loadAll();
【问题讨论】:
-
你找到解决方案了吗?我目前遇到同样的问题。小附件可以正常工作,请求中只是缺少较大的附件,尽管 cid 是生成并内联放置的。
-
使用 jax-ws metro 代替 cxf 可以解决问题。但是我必须使用 cxf .. 所以我仍然遇到问题。不幸的是,我没有时间创建一个独立的应用程序来证明该问题以报告正确的错误报告。
-
我最近找到了类似的解决方法。 stackoverflow.com/questions/51216192/…
标签: java apache cxf jax-ws xop