IBM 专有 Web Service 寻址 SPI

IBM 专有 Web Service 寻址 (WS-Addressing) 系统编程接口 (SPI) 扩展了 IBM 专有 WS-Addressing 应用程序编程接口 (API),以使您能够创建和研究端点引用和其他 WS-Addressing 工件的内容,以及在 Web Service 消息上设置 WS-Addressing 消息寻址属性 (MAP) 或者从该消息中检索此属性。

不能将标准 JAX-WS API 类与这些专有 SPI 配合使用。但是,可以使用 com.ibm.websphere.wsaddressing.jaxws21.EndpointReferenceConverter 类,将使用标准 JAX-WS API 类创建的端点引用转换为专有 com.ibm.websphere.wsaddressing.EndpointReference 类的实例。然后,您可以将这些已转换的端点引用与专有 SPI 配合使用。

在 IBM WS-Addressing SPI 文档中,对本主题中的编程接口进行了更详细的描述。

创建、优化和研究端点引用的内容

用于创建、优化和研究端点引用的内容的专有 SPI 包含在 com.ibm.wsspi.wsaddressing 包中并在下图中进行了总结(前两个接口是由这些 SPI 扩展的专有 API 接口):
请参阅 SPI 文档,以了解提供的类和接口的详细信息。

SPI 扩展了专有 WS-Addressing com.ibm.websphere.wsaddressing.EndpointReference API 来通过 com.ibm.wsspi.wsaddressing.EndpointReference 接口提供大量其他方法。可以将 com.ibm.websphere.wsaddressing.EndpointReference 的实例强制转型为 com.ibm.wsspi.wsaddressing.EndpointReference 以访问这些其他函数。

类似地,SPI com.ibm.wsspi.wsaddressing.EndpointReferenceManager 扩展了 com.ibm.websphere.wsaddressing.EndpointReferenceManager API 中提供的函数集。

可以使用 EndpointReference 和 EndpointReferenceManager SPI 提供的其他方法来完成以下操作:
创建端点引用
通过使用 createEndpointReference(URI) 或 EndpointReferenceManager.createEndpointReference(AttributedURI) 操作指定 EndpointReference 对象要表示的端点的 URI 来创建 EndpointReference 对象。这些方法有别于 API 级别上提供的 createEndpointReference 方法,因为它们不会自动生成 EndpointReference 实例的 URI。如果您知道端点的 URI 处于稳定状态(例如,在没有部署限制的测试环境中),那么可以使用这些方法。
在端点引用的 XML 说明与 Java™ 说明之间进行映射
可以使用 EndpointReference.getSOAPElement 操作来将 EndpointReference 接口的实例序列化为其相应的 SOAP 元素实例。同样,可通过使用 EndpointReference.createEndpointReference(SOAPElement) 操作来将类型 EndpointReferenceType 的 SOAP 元素反序列化为其相应的 EndpointReference Java 表示。如果要为包含 EndpointReference 实例的类型创建定制绑定程序,那么可能发现这些序列化和反序列化接口很有用。
使用更复杂的引用参数类型
在 API 级别上提供的专有接口受限于 type xsd:string 的引用参数,以允许更简单的编程模型。SPI 扩展了此支持以允许类型为 <xsd:any> 的引用参数。EndpointReference 接口提供了用于将引用参数作为 SOAP 元素来获取和设置的机制。另外,EndpointReferenceManager 类提供了 getSOAPElementReferenceParameterFromMessageContext 操作,该操作启用接收端点以从入局消息获取类型不是“字符串”的引用参数。
注: 当使用包含引用参数的 EndpointReference 对象来调用服务时,必须使用完整的 QName 对象(具有存在的所有部件:名称空间、局部部件和前缀)来创建引用参数。如果 QName 对象不完整,那么服务调用会失败。
设置和分析端点引用内容
EndpointReference 接口为您提供了操作来设置和研究 EndpointReference 实例的内容,例如,它的 WS-Addressing address 和 metadata 属性。提供了其他接口来表示组成端点引用的工件:Metadata、AttributedURI 和 ServiceName。可以使用专有 WSAddressingFactory 类提供的操作来创建这些接口的实例。
获取和更改支持的名称空间
此产品中的 WS-Addressing 支持能够支持多个名称空间。在专有 EndpointReference 接口上提供的 setNamespace 和 getNamespace 操作使您能够更改和获取与特定 EndpointReference 对象相关联的名称空间。序列化为 SOAP 元素与 EndpointReference 对象的名称空间是一致的。缺省情况下,目标端点引用(在 JAX-WS BindingProvider 对象的请求上下文或者 JAX-RPC Stub 或 Call 对象上设为 com.ibm.websphere.wsaddressing.WSAConstants.WSADDRESSING_DESTINATION_EPR 属性的端点引用)的名称空间定义了消息的消息寻址属性的名称空间。

设置和检索 WS-Addressing 消息寻址属性

IBM 专有 WS-Addressing SPI 提供若干常量,用来标识 JAX-WS 或 JAX-RPC 属性(可用来在出站消息上设置 WS-Addressing MAP)以及消息上下文属性(可用来在入站消息上检索 MAP)。这些常量在类 com.wsspi.wsaddresssing.WSAConstants 中,如下图所示。此图还显示了生成适当的属性值类型 AttributedURI 和 Relationship 的实例所需的接口。第一个 WSAConstants 接口是一个专有 API 接口。
请参阅 SPI 文档,以了解提供的类、接口和常量的详细信息。

在出站消息上设置 WS-Addressing 消息寻址属性:

在调用具有 BindingProvider、Stub 或 Call 对象的消息之前,可以通过在 JAX-WS BindingProvider 对象的请求上下文或者 JAX-RPC Stub 或 Call 对象上设置适当的属性来将 WS-Addressing 消息信息头添加到出局消息。下表总结了相关属性及其类型。
表 1. 可以在 BindingProvider 对象请求上下文(或者 Stub 或 Call 对象)上设置的出站属性. 该表列示了不同属性名、其 Java 类型、其抽象 WS-Addressing MAP 名称及其缺省值。
属性名(类型为“字符串”) 属性值的 Java 类型 使用“W3C XML 信息集”的标记法则来抽取 WS-Addressing MAP 名称 缺省值
WSADDRESSING_DESTINATION_EPR com.ibm.websphere.wsaddressing.EndpointReference

[destination] URI
[reference parameters]* (any)

未设置

请注意,此属性来自 API。

WSADDRESSING_FROM_EPR com.ibm.websphere.wsaddressing.EndpointReference [source endpoint] 未设置
WSADDRESSING_REPLYTO_EPR com.ibm.websphere.wsaddressing.EndpointReference [reply endpoint] 'none'(如果消息为不带应答的单向消息)或者未设置。对于 JAX-WS 应用程序中的双向异步消息,将自动生成此属性。在这种情况下,如果您尝试设置此属性,那么就会抛出 javax.xml.ws.WebServiceException 异常。对于双向同步消息,仅当端点引用地址是匿名 URI 时才能设置此属性。如果该地址不是匿名 URI,那么就会抛出 javax.xml.ws.WebServiceException 异常。
WSADDRESSING_FAULTTO_EPR com.ibm.websphere.wsaddressing.EndpointReference [fault endpoint] 未设置

如果您尝试为 JAX-WS 应用程序中的双向异步消息设置此属性,那么就会抛出 javax.xml.ws.WebServiceException 异常。对于双向同步消息,仅当端点引用地址是匿名 URI 时才能设置此属性。如果该地址不是匿名 URI,那么就会抛出 javax.xml.ws.WebServiceException 异常。

WSADDRESSING_RELATIONSHIP_SET java.util.Set 包含 com.ibm.wsspi.wsaddressing.Relationship 的实例 [relationship] 未设置
WSADDRESSING_MESSAGE_ID com.ibm.wsspi.wsaddressing.AttributedURI [message id] 已生成并设为唯一值
WSADDRESSING_ACTION com.ibm.wsspi.wsaddressing.AttributedURI [action] 已根据 WS-Addressing 规范生成和设置
WSADDRESSING_OUTBOUND_NAMESPACE 字符串 如果已指定,那么为 WSADDRESSING_DESTINATION_EPR 属性的 WS-Addressing 名称空间,否则为缺省名称空间

从入站消息中检索 WS-Addressing 消息寻址属性:

在 WSAConstants 类中定义的入站属性中,提供了与最后一条入站消息相应的 WS-Addressing 消息信息头。下表总结了可用的入站属性。您应该使用专有 EndpointReferenceManager.getReferenceParameter 接口来从消息上下文中获取引用参数。
表 2. 可以从消息上下文中获取的入站属性. 该表列示了不同属性名、其 Java 类型以及等价的抽象 WS-Addressing MAP 名称。
消息上下文属性名(类型为“字符串”) 属性值的 Java 类型 使用“W3C XML 信息集”的标记法则来抽取 WS-Addressing MAP 名称
WSADDRESSING_INBOUND_TO com.ibm.wsspi.wsaddressing.AttributedURI [destination]
无特定属性。请使用 EndpointReferenceManager.getReferenceParameter(QName name) 方法来获取关联的 MAP。 任何类型 [reference parameters]*
WSADDRESSING_INBOUND_FROM_EPR com.ibm.websphere.wsaddressing.EndpointReference [source endpoint]
WSADDRESSING_INBOUND_REPLYTO_EPR com.ibm.websphere.wsaddressing.EndpointReference [reply endpoint]
WSADDRESSING_INBOUND_FAULTTO_EPR com.ibm.websphere.wsaddressing.EndpointReference [fault endpoint]
WSADDRESSING_INBOUND_RELATIONSHIP java.util.Set 包含 com.ibm.wsspi.wsaddressing.Relationship 的实例 [relationship]
WSADDRESSING_INBOUND_MESSAGE_ID com.ibm.wsspi.wsaddressing.AttributedURI [message id]
WSADDRESSING_INBOUND_ACTION com.ibm.wsspi.wsaddressing.AttributedURI [action]
WSADDRESSING_INBOUND_NAMESPACE 字符串 入局消息的 WS-Addressing 名称空间

指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwbs_wsa_spi
文件名:cwbs_wsa_spi.html