13.3. WSDL 扩展


概述

您可以通过将 WSDL 扩展元素插入到合同(在绑定范围、服务范围或端口范围内)来指定 JMS 传输的基本配置。WSDL 扩展允许您指定引导 JNDI InitialContext 的属性,然后可用于查找 JMS 目的地。您还可以设置影响 JMS 传输层行为的一些属性。

SOAP/JMS 命名空间

SOAP/JMS WSDL 扩展在 http://www.w3.org/2010/soapjms/ 命名空间中定义。要在 WSDL 合同中使用它们,请在 wsdl:definitions 元素中添加以下设置:

<wsdl:definitions ...
    xmlns:soapjms="http://www.w3.org/2010/soapjms/"
  ... >

WSDL 扩展元素

表 13.4 “SOAP/JMS WSDL 扩展元素” 显示可用于配置 JMS 传输的所有 WSDL 扩展元素。

表 13.4. SOAP/JMS WSDL 扩展元素
元素default描述

soapjms:jndiInitialContextFactory

 

指定 JNDI 提供程序的完全限定 Java 类名称。等同于设置 java.naming.factory.initial Java 系统属性。

soapjms:jndiURL

 

指定初始化 JNDI 供应商的 URL。等同于设置 java.naming.provider.url Java 系统属性。

soapjms:jndiContextParameter

 

指定用于创建 JNDI InitialContext 的额外属性。使用 namevalue 属性来指定属性。

soapjms:jndiConnectionFactoryName

 

指定 JMS 连接工厂的 JNDI 名称。

soapjms:deliveryMode

持久性

指定是否使用 JMS PERSISTENTNON_PERSISTENT 消息语义。对于 PERSISTENT 传输模式,JMS 代理会在确认它们之前将消息存储在持久存储中;而 NON_PERSISTENT 消息仅保存在内存中。

soapjms:replyToName

 

[可选] 指定队列消息的回复目的地。回复目的地会出现在 JMSReplyTo 标头中。建议为具有 request-reply 语义的应用程序设置此属性,因为如果未指定,则 JMS 提供程序将分配一个临时回复队列。

此属性的值根据 JMS URI 中指定的变体进行解释:

  • JNDI 变体 - 由 JNDI 解析的目标队列的名称
  • 队列 变体 - 使用 JMS 解析的目标队列的名称

soapjms:priority

4

指定 JMS 消息优先级,范围从 0 (最低)到 9 (最高)。

soapjms:timeToLive

0

JMS 提供程序将丢弃邮件的时间(以毫秒为单位)。值 0 代表一个无限生命周期。

配置范围

WSDL 合同中的 WSDL 元素将影响到合同中定义的端点配置更改的范围。SOAP/JMS WSDL 元素可以置于 wsdl:binding 元素、wsdl:service 元素或 wsdl:port 元素的子项。SOAP/JMS 元素的父级决定将配置放入以下哪些范围:

绑定范围
您可以通过将扩展元素放在 wsdl: binding 元素内,在绑定范围内 配置 JMS 传输。此范围内的元素定义使用此绑定的所有端点的默认配置。绑定范围内的任何设置都可以在服务范围或端口范围内覆盖。
服务范围
您可以通过将扩展元素放在 wsdl: service 元素内,在服务范围内 配置 JMS 传输。此范围内的元素定义此服务中所有端点的默认配置。服务范围内的任何设置都可以在端口范围内覆盖。
端口范围
您可以通过将扩展元素放在 wsdl: port 元素内,在端口范围内 配置 JMS 传输。端口范围内的元素定义此端口的配置。它们覆盖在服务范围或绑定范围中定义的相同扩展元素的默认值。

Example

例 13.9 “使用 SOAP/JMS 配置的 WSDL 合同” 显示 SOAP/JMS 服务的 WSDL 合同。它在绑定范围内配置 JNDI 层、服务范围内的消息交付详细信息,以及端口范围内的回复目的地。

例 13.9. 使用 SOAP/JMS 配置的 WSDL 合同

<wsdl:definitions ...
    xmlns:soapjms="http://www.w3.org/2010/soapjms/"
  ... >
  ...
  <wsdl:binding name="JMSGreeterPortBinding" type="tns:JMSGreeterPortType">
    ...
    <soapjms:jndiInitialContextFactory>
      org.apache.activemq.jndi.ActiveMQInitialContextFactory
    </soapjms:jndiInitialContextFactory>
    <soapjms:jndiURL>tcp://localhost:61616</soapjms:jndiURL>
    <soapjms:jndiConnectionFactoryName>
      ConnectionFactory
    </soapjms:jndiConnectionFactoryName>
    ...
  </wsdl:binding>
  ...
  <wsdl:service name="JMSGreeterService">
    ...
    <soapjms:deliveryMode>NON_PERSISTENT</soapjms:deliveryMode>
    <soapjms:timeToLive>60000</soapjms:timeToLive>
    ...
    <wsdl:port binding="tns:JMSGreeterPortBinding" name="GreeterPort">
      <soap:address location="jms:jndi:dynamicQueues/test.cxf.jmstransport.queue" />
      <soapjms:replyToName>
        dynamicQueues/greeterReply.queue
      </soapjms:replyToName>
      ...
    </wsdl:port>
    ...
  </wsdl:service>
  ...
</wsdl:definitions>

例 13.9 “使用 SOAP/JMS 配置的 WSDL 合同” 中的 WSDL 执行以下操作:

为 SOAP/JMS 扩展声明命名空间。

在绑定范围内配置 JNDI 连接。

将 JMS 交付样式设置为非持久性,每个消息都持续一分钟。

指定目标目的地。

配置 JMS 传输,以便在 greeterReply.queue 队列中发送回复消息。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.