首页 > 解决方案 > Spring Boot,带有 MTOM 的 Apache CXF 3.2.5 发送空附件

问题描述

我在使用 Apache CXF 时遇到了一个奇怪的问题,并且大型 (375MB) MTOM 附件是空的。在 Eclipse 中本地运行它会产生所需的结果,但将它部署到我们的服务器只会得到一个空附件。

服务器是用 .NET 编写的,不支持分块。启用分块后,客户端可以工作,但是当我禁用分块时,它会失败。

遗憾的是我无法在服务器上调试,所以我只能跟踪日志记录。

我已经尝试了所有可以使用谷歌搜索的技巧。

似乎没有什么不同。每次运行我都会得到类似下面的东西

</soap:Body></soap:Envelope>
--uuid:40ef745b-ac3c-4013-bbe7-a9cc28880423
Content-Type: application/xml
Content-Transfer-Encoding: binary
Content-ID: <7611ca0a-22f8-4637-b4f7-a5dfe7f20b81-3@www.somewhere.dk>
Content-Disposition: attachment;name="32_2018-03-28_output.xml"
--uuid:40ef745b-ac3c-4013-bbe7-a9cc28880423

在服务器上尝试使用较小的 (2KB) 文件就可以了。正确附加了一个 75MB 的文件,但会导致接收者发出 HTTP 400(我怀疑这是因为文件未完全传输)

有没有人对可能导致这种情况的原因有任何想法?

标签: apachespring-bootcxfjax-wsmtom

解决方案


经过反复试验,我终于设法“解决”了这个问题。我启用了模式验证,数据现在出现了。这是我原始问题中的两个错误都声称要修复的确切问题。

    Client client = ClientProxy.getClient(port);
    BindingProvider bp = ((BindingProvider) port);
    bp.getRequestContext().put("schema-validation-enabled", "true");

推荐阅读