利用Apache CXF生成客户端的几种方法【推荐wsdl2java】

CXF为您提供了许多途径来构建客户端。 本指南旨在让您快速了解并使用这些方法。

构造客户端

  1. WSDL2Java 命令生成客户端
  2. JAX-WS 代理
  3. JAX-WS 派遣 APIs
  4. Simple Frontend 客户端代理
  5. 动态客户端

构建客户端

WSDL2Java 方式生成客户端

最常见的情况之一是您拥有可能管理或不管理的服务,并且此服务具有WSDL。 在这种情况下,您通常希望从WSDL生成客户端。 这为您提供了一个强类型接口,通过它可以与服务进行交互。 生成客户端后,它的典型用法如下:

HelloService service = new HelloService();

Hello client = service.getHelloHttpPort();


String result = client.sayHi("Joe");

WSDL2Java 工具将根据WSDL文件生成 JAX-WS 客户端.。你可以通过如下三种方式运行 WSDL2java:

  • 命令行方式
  • Maven插件方式
  • WSDL2Java API

更新示例,请参阅: Developing a JAX-WS consumer ,或查看 Hello World 示例。

JAX-WS 代理方式

您可以使用Service.create创建Service实例,而不是直接使用wsdl2java生成客户端,示例代码如下:

import java.net.URL;

import javax.xml.ws.Service;

...



URL wsdlURL = new URL("http://localhost/hello?wsdl");

QName SERVICE_NAME = new QName("http://apache.org/hello_world_soap_http", "SOAPService");

Service service = Service.create(wsdlURL, SERVICE_NAME);

Greeter client = service.getPort(Greeter.class);

String result = client.greetMe("test");

JAX-WS 调度 APIs

JAX-WS提供了“调度”机制,可以轻松地动态调用您尚未为其生成客户端的服务。 使用Dispatch机制,您可以创建消息(可以是JAXB对象,Source对象或SAAJ消息)并将它们分派给服务器。 一个简单的例子可能如下所示:

import java.net.URL;

import javax.xml.transform.Source;

import javax.xml.ws.Dispatch;

import javax.xml.ws.Service;

...



URL wsdlURL = new URL("http://localhost/hello?wsdl");

Service service = Service.create(wsdlURL, new QName("HelloService"));

Dispatch<Source> disp = service.createDispatch(new QName("HelloPort"), Source.class, Service.Mode.PAYLOAD);



Source request = new StreamSource("<hello/>")

Source response = disp.invoke(request);

注意: 您也可以在没有WSDL的情况下使用Dispatch方式。

简单的 Frontend 客户端代理方式

如果您使用simple frontend开发了服务,则可以使用ClientProxyFactoryBean API为您的服务创建Java代理客户端。 这样您就可以使用服务界面与您的服务进行通信。 有关更多信息,请参阅Simple Frontend文档。


Client client = ....;

Object[] result = client.invoke("sayHi", "Dan");

 

动态客户端

CXF包含一个客户端界面,允许您调用操作并为这些操作传递参数。 例如:

有两种方法可以在运行时创建客户端。

  1. 第一种选择是使用ClientFactoryBean或JaxWsClientFactoryBean类。 这些将为服务的SEI创建代理对象。 这些代理无法处理复杂对象。
  2. 第二个使用DynamicClientFactory或其子类之一。 DynamicClientFactory为WSDL中描述的复杂对象生成和编译JAXB POJO的附加步骤,以便在运行时通过反射使用。

当您使用动态语言(如Groovy和CXF)时,这非常有用,但可以直接从Java使用反射。

更多关于动态客户端的信息: Dynamic Clients

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值