29.2. 通过注入实例化代理


概述

Apache CXF 使用 Spring Framework 可让您避免使用 JAX-WS API 创建服务代理。它允许您在配置文件中定义客户端端点,然后将代理直接注入实施代码。当运行时实例化 implementation 对象时,它还会根据配置实例化外部服务的代理。该实施通过引用实例化代理来分发。

由于代理使用配置文件中的信息实例化,因此 WSDL 位置不需要硬编码。它在部署时可以更改。您还可以指定运行时应搜索 WSDL 的类路径。

步骤

要将外部服务的代理注入服务提供商的实现中,请执行以下操作:

  1. 在已知位置(应用程序的所有部分都可以访问)中部署所需的 WSDL 文档。

    注意

    如果您要将应用程序部署为 WAR 文件,建议您将所有 WSDL 文档和 XML Schema 文档放在 WAR 的 WEB-INF/wsdl 文件夹中。

    注意

    如果您要将应用部署为 JAR 文件,建议您将所有 WSDL 文档和 XML Schema 文档放在 JAR 的 META-INF/wsdl 文件夹中。

  2. 要注入的代理配置 JAX-WS 客户端端点。
  3. 使用 @Resource 注释,将代理 注入到 您的服务中。

配置代理

您可以使用应用配置文件中的 jaxws:client 元素配置 JAX-WS 客户端端点。这将告知运行时使用指定属性实例化 org.apache.cxf.jaxws.JaxWsClientProxy 对象。此对象是要注入到服务提供商的代理。

您至少需要为以下属性提供值:

  • id- 指定用于识别要注入的客户端的 ID。
  • serviceClass-Spec 标识代理发出请求的服务的 SEI。

例 29.1 “配置要注入服务实施中的代理” 显示 JAX-WS 客户端端点的配置。

例 29.1. 配置要注入服务实施中的代理

<beans ...
  xmlns:jaxws="http://cxf.apache.org/jaxws"
  ...
  schemaLocation="...
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
    ...">
  <jaxws:client id="bookClient"
                serviceClass="org.apache.cxf.demo.BookService"
                wsdlLocation="classpath:books.wsdl"/>
  ...
</beans>
注意

例 29.1 “配置要注入服务实施中的代理” 中,wsdlLocation 属性指示运行时从类路径加载 WSDL。如果 books.wsdl 在 classpath 上,则运行时将能够找到它。

有关配置 JAX-WS 客户端的详情,请参考 第 17.2 节 “配置消费者端点”

对供应商实施进行编码

您可以使用 @Resource 将配置的代理注入服务实施中,如 例 29.2 “将代理注入服务实现” 所示。

例 29.2. 将代理注入服务实现

package demo.hw.server;

import org.apache.hello_world_soap_http.Greeter;

@javax.jws.WebService(portName = "SoapPort", serviceName = "SOAPService",
                      targetNamespace = "http://apache.org/hello_world_soap_http",
                      endpointInterface = "org.apache.hello_world_soap_http.Greeter")
public class StoreImpl implements Store {

@Resource(name="bookClient") private BookService proxy;

}

该注释的 name 属性对应于 JAX-WS 客户端的 id 属性的值。配置的代理会在注释后立即注入到 BookService 对象中。您可以使用此对象在代理的外部服务上进行调用。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.