9.3. 启用 MTOM

默认情况下,Apache CXF 运行时不会启用 MTOM 支持。它将所有二进制数据作为普通 SOAP 消息的一部分或作为未优化的附件发送。您可以以编程方式或使用配置来激活 MTOM 支持。

9.3.1. 使用 JAX-WS API

概述

服务供应商和消费者都必须启用 MTOM 优化功能。JAX-WS API 为每种类型端点提供不同的机制。

服务供应商

如果您使用 JAX-WS API 发布您的服务提供商,您可以启用运行时的 MTOM 支持,如下所示:

  1. 访问您发布的服务的 Endpoint 对象。

    访问 Endpoint 对象的最简单方法是在发布端点时。更多信息请参阅 第 31 章 发布服务

  2. 使用 getBinding() 方法从 Endpoint 获取 SOAP 绑定,如 例 9.4 “从端点获取 SOAP Binding” 所示。

    例 9.4. 从端点获取 SOAP Binding

    // Endpoint ep is declared previously
    SOAPBinding binding = (SOAPBinding)ep.getBinding();

    您必须将返回的绑定对象转换为 SOAPBinding 对象,以访问 MTOM 属性。

  3. 使用绑定的 setMTOMEnabled() 方法将绑定的 MTOM enabled 属性设为 true,如 例 9.5 “设置服务提供商的 MTOM Enabled Property” 所示。

    例 9.5. 设置服务提供商的 MTOM Enabled Property

    binding.setMTOMEnabled(true);

消费者

要让 MTOM 启用 JAX-WS 消费者,您必须执行以下操作:

  1. 将使用者的代理转换为 BindingProvider 对象。

    有关获取消费者代理的详情,请参考 第 25 章 在没有 WSDL 合同的情况下开发消费者第 28 章 从 WSDL 合同开发消费者

  2. 使用 getBinding() 方法从 BindingProvider 获取 SOAP 绑定,如 例 9.6 “从绑定 Provider获取 SOAP 绑定” 所示。

    例 9.6. 从绑定 Provider获取 SOAP 绑定

    // BindingProvider bp declared previously
    SOAPBinding binding = (SOAPBinding)bp.getBinding();
  3. 使用绑定的 setMTOMEnabled() 方法将绑定 MTOM enabled 属性设为 true,如 例 9.7 “设置 Consumer 的 MTOM Enabled Property” 所示。

    例 9.7. 设置 Consumer 的 MTOM Enabled Property

    binding.setMTOMEnabled(true);