【问题标题】:Spring Boot, Apache CXF 3.2.5 with MTOM sends empty attachmentSpring Boot,带有 MTOM 的 Apache CXF 3.2.5 发送空附件
【发布时间】:2018-12-15 09:43:07
【问题描述】:

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

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

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

我已经尝试了所有可以通过 Google 搜索到的技巧。

  • 禁用架构验证 (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(我怀疑这是因为文件未完全传输)

有没有人知道是什么原因造成的?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

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

    Jimmy 能否对最新的CXF issue 发表评论并提供更多详细信息?哪个版本的 CXF,你使用什么样的客户端,理想的真实代码示例,客户端日志?

    【讨论】:

      猜你喜欢
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 2012-07-04
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多