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 扩展了专有 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 中提供的函数集。
- 创建端点引用
- 通过使用 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 消息寻址属性

在出站消息上设置 WS-Addressing 消息寻址属性:
属性名(类型为“字符串”) | 属性值的 Java 类型 | 使用“W3C XML 信息集”的标记法则来抽取 WS-Addressing MAP 名称 | 缺省值 |
---|---|---|---|
WSADDRESSING_DESTINATION_EPR | com.ibm.websphere.wsaddressing.EndpointReference | [destination] URI |
未设置 请注意,此属性来自 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 消息寻址属性:
消息上下文属性名(类型为“字符串”) | 属性值的 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 名称空间 |