Web Service 寻址注释
WS-Addressing 规范提供了传输中立的机制来对 Web Service 进行寻址,以帮助进行端对端寻址。如果有 JAX-WS 应用程序,那么您可以在代码中使用 Java 注释来指定运行时的 WS-Addressing 行为。
您可以使用 WS-Addressing 注释以启用 WS-Addressing 支持,指定入站消息中是否需要 WS-Addressing 信息,控制服务支持的消息交换模式以及指定要与 Web Service 操作或故障响应关联的操作。
WebSphere® Application Server 支持以下 WS-Addressing 注释。这些注释在 JAX-WS 2.2 规范中进行定义,除非另有说明。JAX-WS 2.2 规范将取代 JAX-WS 2.1 规范并包括此规范的功能。请参阅 Java API for XML-Based Web Services 2.2 规范,以获取完整详细信息。
- javax.xml.ws.Action
- 指定与 Web Service 操作相关联的操作。
- 当执行自底向上方法来开发 JAX-WS Web Service 时,您可以使用 wsgen 命令行工具从 Java 应用程序代码生成 WSDL 文档。对于添加到 WSDL 操作的此属性,您还必须对实现类指定 @Addressing 注释。生成的 WSDL 文档中的结果是“操作”注释将在 wsdl:operation 的 input message 和 output message 元素上具有 wsam:Action 属性。 或者,如果不想使用 @Addressing 注释,那么可以提供您自己的已定义“操作”属性的 WSDL 文档。
- 当执行自上而下方法来开发 JAX-WS Web Service 时,您可以使用 wsimport 命令行工具从现有 WSDL 文档生成 Java 应用程序代码。在这种情况下,生成的 Java 代码将包含正确的“操作”和 FaultAction 注释。
- 如果此操作在代码注释或 WSDL 文档中未指定,那么会使用 Web Services Addressing 1.0 元数据规范中定义的缺省操作模式。请参阅此规范,以获取完整详细信息。注: 虽然 WebSphere Application Server 运行时环境支持不推荐的 wsaw:Action 属性,但是,如果尝试从包含不推荐的 wsaw:Action 属性的旧 WSDL 文档生成 Java 代码,那么会忽略此属性。
- javax.xml.ws.FaultAction
- 指定添加到某缺省响应的操作。如果您将此注释与特定方法配合使用,那么会将 WS-Addressing FaultAction 扩展属性添加到与该方法对应的 WSDL 操作的 fault 元素。对于添加到 WSDL 操作的此属性,您还必须对实现类指定寻址注释。如果不想使用寻址注释,那么可以提供您自己的且已经定义的带有“操作”属性的 WSDL 文档。该注释必须包含在“操作”注释中。
- 从包含 WS-Addressing FaultAction 注释的 Java 应用程序代码生成的 WSDL 文档将在 wsdl:operation 的 fault message 元素上具有 wsam:Action 属性。注: 要确保您写入的任何定制“异常”类成功映射到生成的 WSDL 文档,请扩展 java.lang.Exception 类,而不是 java.lang.RuntimeException 类。
- javax.xml.ws.soap.Addressing
- 对该服务要启用 WS-Addressing 支持进行指定。在服务实现 Bean 中您只能使用此注释;在服务端点接口不能使用此注释。
- com.ibm.websphere.wsaddressing.jaxws21.SubmissionAddressing
- 此注释是 JAX-WS 规范的 IBM 实现的一部分。 此注释对该服务要启用 2004/08 WS-Addressing 规范的 WS-Addressing 支持进行指定。在服务实现 Bean 中您只能使用此注释;在服务端点接口不能使用此注释。
有关寻址注释和 SubmissionAddressing 注释(包括代码示例)的更多信息,请参阅使用寻址注释对 JAX-WS 应用程序启用 Web Service 寻址支持。
下列示例代码使用“操作”注释来定义要进行调用的调用操作 (input),
并定义添加到响应消息的操作 (output)。
如果缺省发生下列情况,那么该示例还使用 FaultAction 注释对添加到响应消息的操作进行指定:
@WebService(name = "Calculator")
public interface Calculator {
...
@Action(
input="http://calculator.com/inputAction",
output="http://calculator.com/outputAction",
fault = { @FaultAction(className=AddNumbersException.class,
value="http://calculator.com/faultAction")
}
)
public int add(int value1, int value2) throws AddNumbersException {
return value1 + value2;
}
}
如果您使用工具从代码生成服务工件,那么在先前示例中生成的 WSDL 标记如下所示:<definitions targetNamespace="http://example.com/numbers" ...>
...
<portType name="AddPortType">
<operation name="Add">
<input message="tns:AddInput" name="Parameters"
wsam:Action="http://calculator.com/inputAction"/>
<output message="tns:AddOutput" name="Result"
wsam:Action="http://calculator.com/outputAction"/>
<fault message="tns:AddNumbersException" name="AddNumbersException"
wsam:Action="http://calculator.com/faultAction"/>
</operation>
<portType>
...
<definitions>