为 JAX-WS 应用程序启用 Web Service 寻址支持
Web Service 寻址 (WS-Addressing) 支持提供用来对 Web Service 寻址并在消息中提供寻址信息的机制。对于 JAX-WS 应用程序,您可通过多种不同的方法来启用 WS-Addressing 支持,例如配置策略集或在代码中使用注释。
关于此任务
请执行此任务,以作为服务提供程序或另一方所提供服务的客户机端来启用 WS-Addressing 支持。
对于服务提供程序,缺省情况下启用 WS-Addressing 支持,因此您不必采取任何操作来启用支持。但是,您可以使用启用机制来修改服务的其他 WS-Addressing 行为,例如是否需要 WS-Addressing 信息以及在生成的 WSDL 文档中包含哪些内容。
- 在部署应用程序后,通过将策略集连接到应用程序来修改 WS-Addressing 支持的行为。在策略集中,您可以配置 WS-Addressing 策略类型来指定在入局消息中是否需要 WS-Addressing 信息以及是需要同步还是异步消息传递。可以通过在服务器上启用策略共享或通过在客户机上应用提供程序策略来与支持 WS-Policy 的其他服务器和客户机进行 WS-Addressing 策略配置通信。此方法将覆盖其他方法。
- 在 port-component 元素中使用部署描述符元素。
- 在开发服务期间,通过在服务代码中使用 Addressing 或 SubmissionAddressing 注释来修改 WS-Addressing 支持的行为。在每个注释中,都可以指定是否对服务器启用 WS-Addressing,服务器是否需要入局消息中的 WS-Addressing 信息以及服务器将使用的消息交换模式。如果代码中存在 Addressing 注释,那么会将 UsingAddressing 元素和 WS-Policy 断言添加至针对服务生成的任何 WSDL 文档。
- 在开发服务期间,通过将 UsingAddressing 元素或 WS-Policy 断言添加至 WSDL 文档来修改 WS-Addressing 支持的行为。如果的确提供了自己的 WSDL 文档,而不是依赖 JAX-WS 运行时环境来生成 WSDL 文档,并且您的 WSDL 文档正在由非 JAX-WS 2.2 客户机使用,那么您可能想要包含 UsingAddressing 元素,因为这类客户机将不会处理 WS-Policy 断言。
对于服务客户机,缺省情况下禁用 WS-Addressing 支持。使用下列其中一种方法来启用 WS-Addressing 支持。以下列表按优先顺序的降序排序,因为您可以应用多种方法。例如,在用法上,部署描述符方法优先于注释或功能,而策略集又优先于部署描述符方法。
- 将策略集连接到客户机工件并执行下列其中一项操作:
- 在策略中指定 WS-Addressing 是必需的。
- 同时应用客户机和提供程序策略。在此情境中,仅当在服务提供程序上启用了策略共享并且提供程序的策略配置指定 WS-Addressing 必需时,才在客户机上启用 WS-Addressing 支持。
- 在客户机请求上下文上设置 com.ibm.websphere.webservices.use.async.mep 属性。
- 使用 IBM® 专有的 WS-Addressing SPI 将消息寻址属性添加至消息请求上下文。
- 在 port-component-ref 元素中使用部署描述符元素。
- 在客户机代码中将寻址注释与 WebServiceRef 注释组合使用(如果使用的是已注入的 Web Service 代理引用)。
- 在客户机代码中使用寻址功能。使用此方法设置的属性优先于那些在服务的 WSDL 文档中设置的属性。
- 在 WSDL 文档中使用 WS-Policy 断言来指定 WS-Addressing 支持。如果将寻址注释添加至客户机应用程序代码,那么生成的 WSDL 文档将包含 WS-Policy 断言。
- 在服务的 WSDL 文档中指定 UsingAddressing 元素。如果服务使用 Addressing 注释,并且您从代码生成 WSDL 文档,那么 UsingAddressing 元素已经存在。
下表概括了 WS-Addressing 支持的行为。使用此表来确定不涉及策略配置的客户机设置是否接受请求消息。
这是一个包含跨列标题的复杂表。有一个标题为“客户机设置”的标题列,用于指定是否对客户机启用了 WS-Addressing 支持,而且还指定所配置的消息传递样式。第二个主要列显示提供程序上的策略设置,该主要列具有两个指示 WS-Addressing 是可选还是必需的子列。这两个子列又进一步细分为三个用于消息传递样式(同步、异步或两者)的子列。第三个主要列显示提供程序上的 WSDL 设置,该主要列具有两个指示 WS-Addressing 是可选还是必需的子列。
客户机设置 | 提供程序策略设置 | 提供程序 WSDL 设置(UsingAddressing required 属性) | ||||||
---|---|---|---|---|---|---|---|---|
WS-Addressing 是可选的 | WS-Addressing 是必需的1 | |||||||
同步和异步 | 仅同步 | 仅异步 | 同步和异步 | 仅同步 | 仅异步 | false(WS-Addressing 是可选的) | true(WS-Addressing 是必需的1) | |
WS-Addressing 支持已启用,并且消息传递样式为同步 | 接受消息 | 接受消息 | 故障 | 接受消息 | 接受消息 | 故障 | 接受消息 | 接受消息 |
WS-Addressing 支持已启用,并且消息传递样式为异步 | 接受消息 | 故障 | 接受消息 | 接受消息 | 故障 | 接受消息 | 接受消息 | 接受消息 |
WS-Addressing 支持未启用,并且消息传递样式为同步 | 接受消息 | 接受消息 | 接受消息2 | 故障 | 故障 | 故障 | 接受消息 | 故障 |
WS-Addressing 支持未启用,并且消息传递样式为异步3 | 故障 | 故障 | 故障 | 故障 | 故障 | 故障 | 故障 | 故障 |
Notes:
- 如果 WS-Addressing 是必需的,那么将拒绝所有不带 WS-Addressing 头的请求。
- 仅当请求中存在 WS-Addressing 头时,才会实施消息样式。
- 没有 WS-Addressing 头,无法进行异步消息传递。
使用下表来确定是否接受请求消息(当客户机和提供程序都具有 WS-Addressing 策略配置时),确定客户机是否应用了提供程序和客户机策略,以及确定是否在服务器上启用了策略共享。
这是一个包含跨列标题的复杂表。有一个标题为“客户机设置”的标题列,用于指定 WS-Addressing 支持在客户机上是可选还是必需,而且还指定所配置的消息传递样式。第二个主要列显示提供程序上的策略设置,该主要列具有两个指示 WS-Addressing 是可选还是必需的子列。这两个子列又进一步细分为三个用于消息传递样式(同步和异步、仅同步或仅异步)的子列。
客户机策略设置 | 提供程序策略设置 | |||||
---|---|---|---|---|---|---|
WS-Addressing 是可选的 | WS-Addressing 是必需的 | |||||
同步和异步 | 仅同步 | 仅异步 | 同步和异步 | 仅同步 | 仅异步 | |
WS-Addressing 为可选,并且消息传递样式为同步和异步 | 接受消息 | 接受消息 | 接受消息 | 接受消息 | 接受消息 | 接受消息 |
WS-Addressing 为可选,并且消息传递样式为仅同步 | 接受消息 | 接受消息 | 接受消息1 | 接受消息 | 接受消息 | 故障 |
WS-Addressing 为可选,并且消息传递样式为仅异步2 | 故障 | 故障 | 故障 | 接受消息 | 故障 | 接受消息 |
WS-Addressing 为必需,并且消息传递样式为同步和异步 | 接受消息 | 接受消息 | 接受消息 | 接受消息 | 接受消息 | 接受消息 |
WS-Addressing 为必需,并且消息传递样式为仅同步 | 接受消息 | 接受消息 | 故障 | 接受消息 | 接受消息 | 故障 |
WS-Addressing 为必需,并且消息传递样式为仅异步 | 接受消息 | 故障 | 接受消息 | 接受消息 | 故障 | 接受消息 |
Notes:
如果不共享提供程序和客户机策略,那么客户机不会发送 WS-Addressing 头(除非您通过其他方法在客户机上启用了 WS-Addressing)。在此情境中,如果提供程序策略指定 WS-Addressing 是必需的,那么无论消息样式如何,服务器将生成故障。- 仅当请求中存在 WS-Addressing 头时,才会实施消息样式。
- 没有 WS-Addressing 头,无法进行异步消息传递。
过程
- 要通过在服务提供程序或客户机上创建或修改策略集来修改 WS-Addressing 支持的行为,请参阅主题:使用策略集为 JAX-WS 应用程序启用 Web Service 寻址支持。
- 使用 WebSphere® Application Server 客户机来启用 WS-Addressing 支持时,在客户机请求上下文上设置 com.ibm.websphere.webservices.use.async.mep 属性。 有关更多信息,请参阅主题:以异步方式调用 JAX-WS Web Service。
- 要使用服务或客户机应用程序的部署描述符来修改 WS-Addressing 支持的行为,请参阅主题:使用部署描述符为 JAX-WS 应用程序启用 Web Service 寻址支持。
- 要通过在服务应用程序中使用寻址注释或者在客户机上使用注入的 Web Service 代理引用,以编程方式修改 WS-Addressing 支持的行为,请参阅主题:使用寻址注释为 JAX-WS 应用程序启用 Web Service 寻址支持。
- 要在客户机上通过创建寻址功能类的实例,以编程方式启用 WS-Addressing 支持,请参阅主题:使用寻址功能部件为 JAX-WS 应用程序启用 Web Service 寻址支持。
- 要在开发客户机或服务应用程序期间,通过将 WS-Policy 断言添加至 WSDL 文件来修改 WS-Addressing 支持的行为,请参阅主题:使用 WS-Policy 为 JAX-WS 应用程序启用 Web Service 寻址支持。
结果
现在,SOAP 消息头包含 WS-Addressing 属性,服务器在接收消息时将处理这些属性。