9.3. 启用 MTOM
默认情况下,Apache CXF 运行时不启用 MTOM 支持。它将所有二进制数据作为常规 SOAP 消息的一部分或者作为未优化的附件发送。您可以以编程方式激活 MTOM 支持,也可以使用配置。
9.3.1. 使用 JAX-WS API
概述
服务提供商和消费者都必须启用 MTOM 优化功能。JAX-WS API 为每种端点提供不同的机制。
服务供应商
如果使用 JAX-WS API 发布您的服务提供商,则启用运行时的 MTOM 支持,如下所示:
访问已发布服务的
Endpoint
对象。访问
Endpoint
对象的最简单方法是当您发布端点时。更多信息请参阅 第 31 章 发布服务。使用其
getBinding ()
方法从Endpoint
获取 SOAP 绑定,如 例 9.4 “从 Endpoint 获取 SOAP Binding” 所示。例 9.4. 从 Endpoint 获取 SOAP Binding
// Endpoint ep is declared previously SOAPBinding binding = (SOAPBinding)ep.getBinding();
您必须将返回的绑定对象转换为
SOAPBinding
对象来访问 MTOM 属性。使用绑定的
setMTOMEnabled ()
方法将绑定的 MTOM enabled 属性设为true
,如 例 9.5 “设置服务提供商的 MTOM Enabled Property” 所示。例 9.5. 设置服务提供商的 MTOM Enabled Property
binding.setMTOMEnabled(true);
消费者
要 MTOM 启用 JAX-WS 使用者,您必须执行以下操作:
将消费者的代理投到
BindingProvider
对象。有关获取消费者代理的详情,请参考 第 25 章 在没有 WSDL 合同的情况下开发消费者 或 第 28 章 从 WSDL 合同开发消费者。
使用其
getBinding ()
方法从BindingProvider
获取 SOAP 绑定,如 例 9.6 “从BindingProvider
获取 SOAP 绑定” 所示。例 9.6. 从
BindingProvider
获取 SOAP 绑定// BindingProvider bp declared previously SOAPBinding binding = (SOAPBinding)bp.getBinding();
使用绑定的
setMEnabled ()方法将 bindings MTOM
enabled 属性设为true
,如 例 9.7 “设置 Consumer 的 MTOM Enabled Property” 所示。例 9.7. 设置 Consumer 的 MTOM Enabled Property
binding.setMTOMEnabled(true);
9.3.2. 使用配置
概述
如果使用 XML (如部署到容器时)发布您的服务,您可以在端点配置文件中的 MTOM 支持启用端点的 MTOM 支持。有关配置端点的更多信息,请参阅 第 IV 部分 “配置 Web 服务端点”。
流程
MTOM 属性在您的端点的 jaxws:endpoint
元素内设置。启用 MTOM 执行以下操作:
-
向端点的
jaxws:property
子元素中添加jaxws:
property 子元素。 -
向
jaxws:property
元素中添加条目
子元素。 -
将
条目
元素的key
属性设置为mtom-enabled
。 -
将
entry
元素的value
属性设置为true
。
示例
例 9.8 “配置启用 MTOM” 显示已启用 MTOM 的端点。
例 9.8. 配置启用 MTOM
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd"> <jaxws:endpoint id="xRayStorage" implementor="demo.spring.xRayStorImpl" address="http://localhost/xRayStorage"> <jaxws:properties> <entry key="mtom-enabled" value="true"/> </jaxws:properties> </jaxws:endpoint> </beans>