第 13 章 使用 JMS 的 SOAP

摘要

Apache CXF 实施 W3C 标准 SOAP/JMS 传输。这个标准旨在提供更加可靠的 SOAP/HTTP 服务的替代方案。使用此传输的 Apache CXF 应用程序应该能够与实施 SOAP/JMS 标准的应用程序交互。传输在端点的 WSDL 中直接配置。

注意 :在 CXF 3.0 中删除了对 JMS 1.0.2 API 的支持。如果您使用红帽 JBoss Fuse 6.2 或更高版本(包括 CXF 3.0),您的 JMS 供应商必须支持 JMS 1.1 API。

13.1. 基本配置

概述

JMS 协议的 SOAP 由 World Wide Web Consortium(W3C)定义,作为向大多数服务使用的定制 SOAP/HTTP 协议提供更可靠的传输层的方法。Apache CXF 实现与规格完全兼容,并与也兼容的框架兼容。

此传输使用 JNDI 来查找 JMS 目的地。调用操作时,请求将打包为 SOAP 消息,并发送到指定目的地的 JMS 消息正文。

使用 SOAP/JMS 传输:

  1. 指定传输类型是 SOAP/JMS。
  2. 使用 JMS URI 指定目标目的地。
  3. 另外,还可配置 JNDI 连接。
  4. (可选)添加额外的 JMS 配置。

指定 JMS 传输类型

您可以将 SOAP 绑定配置为在指定 WSDL 绑定时使用 JMS 传输。将 soap:binding 元素的 transport 属性设置为 http://www.w3.org/2010/soapjms/例 13.1 “SOAP over JMS 绑定规格” 显示使用 SOAP/JMS 的 WSDL 绑定。

例 13.1. SOAP over JMS 绑定规格

<wsdl:binding ... >
  <soap:binding style="document"
                transport="http://www.w3.org/2010/soapjms/" />
  ...
</wsdl:binding>

指定目标目的地

在为端点指定 WSDL 端口时,您可以指定 JMS 目标目的地的地址。SOAP/JMS 端点的地址规格使用与 SOAP/HTTP 端点相同的 soap:address 元素和属性。差别在于地址规格。JMS 端点使用 JMS 1.0 的 URI Scheme 中定义的 JMS URI。例 13.2 “JMS URI 语法” 显示 JMS URI 的语法。

例 13.2. JMS URI 语法

jms:variant:destination?options

表 13.1 “JMS URI 变体” 描述 JMS URI 的可用变体。

表 13.1. JMS URI 变体

变体描述

jndi

指定目的地名称是 JNDI 队列名称。使用这个变体时,您必须提供配置来访问 JNDI 供应商。

jndi-topic

指定目的地名称是 JNDI 主题名称。使用这个变体时,您必须提供配置来访问 JNDI 供应商。

队列

指定目的地是使用 JMS 解析的队列名称。提供的字符串 传递到 Session.createQueue(),以创建目的地的表示形式。

topic

指定目标为使用 JMS 解析的主题名称。提供的字符串 传递到 Session.createTopic(),以创建目的地的表示形式。

JMS URI 的选项 部分用于配置传输,并在 第 13.2 节 “JMS URI” 中讨论。

例 13.3 “SOAP/JMS 端点地址” 显示 SOAP/JMS 端点的 WSDL 端口条目,该端点使用 JNDI 查找其目标。

例 13.3. SOAP/JMS 端点地址

<wsdl:port ... >
  ...
  <soap:address location="jms:jndi:dynamicQueues/test.cxf.jmstransport.queue" />
</wsdl:port>

配置 JNDI 和 JMS 传输

SOAP/JMS 提供了多种方法来配置 JNDI 连接和 JMS 传输: