29.2. 通过 Injection 实例化代理


概述

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

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

流程

将外部服务的代理注入服务提供商的实现中:

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

    注意

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

    注意

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

  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 属性指示运行时从 classpath 加载 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.