29.2. 通过 Injection 实例化代理
概述 复制链接链接已复制到粘贴板!
Apache CXF 使用 Spring Framework 可让您避免使用 JAX-WS API 创建服务代理的问题。它允许您在配置文件中定义客户端端点,然后将代理直接注入到实施代码中。当运行时实例化实现对象时,它还将根据配置实例化外部服务的代理。实现通过引用实例化代理来移交。
由于代理使用配置文件中的信息实例化,所以不需要硬编码 WSDL 位置。它在部署时可以更改。您还可以指定运行时应该为 WSDL 搜索应用程序的类路径。
流程 复制链接链接已复制到粘贴板!
将外部服务的代理注入服务提供商的实现中:
配置代理 复制链接链接已复制到粘贴板!
您可以使用应用配置文件中的 jaxws:client
元素配置 JAX-WS 客户端端点。这告知运行时使用指定属性实例化 org.apache.cxf.jaxws.JaxWsClientProxy
对象。此对象是要注入服务供应商的代理。
您至少需要提供以下属性的值:
-
id
- 指定用于识别要注入的客户端的 ID。 -
serviceClass
-Spec 表示代理发出请求的服务的 SEI。
例 29.1 “注入到服务实施的代理的配置” 显示 JAX-WS 客户端端点的配置。
例 29.1. 注入到服务实施的代理的配置
在 例 29.1 “注入到服务实施的代理的配置” 中 ,wsdlLocation
属性指示运行时从 classpath 加载 WSDL。如果 books.wsdl
位于 classpath 上,则运行时将可以找到它。
有关配置 JAX-WS 客户端的更多信息,请参阅 第 17.2 节 “配置消费者端点”。
为供应商实施编码 复制链接链接已复制到粘贴板!
您可以使用 @Resource
将配置代理注入服务实施中,作为 例 29.2 “将代理注入服务实现” 所示。
例 29.2. 将代理注入服务实现
该注解的 name
属性对应于 JAX-WS 客户端的 id
属性的值。配置的代理会在注解后马上被注入到 BookService
对象中。您可以使用此对象在代理的外部服务上进行调用。