Spring Boot,带有MTOM的Apache CXF 3.2.5发送空附件

时间:2018-07-06 18:50:35

标签: apache spring-boot cxf jax-ws mtom

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

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

可悲的是,我无法在服务器上进行调试,因此我仅限于跟踪日志记录。

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

  • 禁用架构验证(CXF-4551)(CXF-7758
  • 在发送之前手动将文件复制到java.io.tmpdir,以确保可以读取。
  • 自定义数据源
  • 禁用WS-Security
  • 禁用日志记录拦截器

似乎没有什么改变。 每次运行我都会得到类似以下的内容

</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(我怀疑这是因为文件未完全传输)

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我无法添加评论,因此我将其发布为答案。

Jimmy也许您可以评论最新的CXF issue并提供更多详细信息?哪个版本的CXF,您使用的是哪种客户端,理想的实际代码示例是客户端日志?