XFire 1.2.6调用Web Service的几种方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XFire 1.2.6调用Web Service的几种方法
最近由于项目的需求,我开始学习XFire 1.2.6。
XFire的服务发布很简单,但由于xfire为用户提供了多种调用(invoke) web service的方法,所以在编写客户端代码的时侯,需要我们做一番斟酌。
在不同的应用环境下,我们可能需要采用不同的服务调用的方法。
本文将详细介绍这几种调用web服务的方法。
方法一:动态客户端(Dynamic Client)
这是一种最简单的web服务调用方法。
具体过程如下:
1.创建一个服务代理,其中url为调用服务的wsdl地址。
Client client = new Client(new URL(url));
2.调用web服务,输入参数(简单类型)。
Object[] results = client.invoke(methodName, new Object[]{param1,param2});
3.打印web 服务运行结果
System.out.println((ReturnValueType)results[0]);
全过程只需要三个过程,非常简单。
但是,上述过程仅限于简单的方法调用,对于那些以复杂数据结构为参数的方法,以及复杂结构的返回值的方法,需要采用另外的处理方法,否则将无法正常运行。
关于复杂参数的传递以及调用复杂返回值方法的过程还有待进一步研究,如果哪个读者熟悉这一块,可以与我联系,本人将非常感谢。
方法二:代理工厂方法(Proxy Factory)
一般的方法如如下:
1.创建一个服务实例,就像在自己的服务器上创建一样。
要注意的是,这里的“”
Service serviceModel = new ObjectServiceFactory().create(YourService.class);
要注意的是,这里的“YourService”是接口类,而不是接口的实现类。
2.定义服务URL
String serviceURL = “http://localhost:8080/XFireTest/services/YourService”;
3.为服务创建一个代理
YourService client = (YourService) new XFireProxyFactory().create(serviceModel,
serviceURL);
4.使用代理访问服务提供的方法
String name = (String) client.getName();
如果已经知道调用的服务在本地时,我们可以采取下面方法(本地传输)来调用,这种方法可以提高调用服务的速度,减少调用服务的延迟时间。
1.XFire xfire = XFireFactory.newInstance().getXFire();
2.XFireProxyFactory factory = new XFireFactory(xfire);
3.YourService services = (YourService) factory.create(serviceModel,
“xfie.local://YourService”);
方法三:客户端/服务端Stubs
Stubs的产生将不是本文所关注的问题,下面是使用stubs来调用web 服务的过程。
1.定义Web Service的URL
String serviceURL = “http://localhost:8080/XFireTest/services/ServiceName”;
2.实例化一个客户端
ServiceNameClient client = new ServiceNameClient();
3.利用实例化的客户端产生一个服务接口
ServiceNamePortType service = client.getServiceNameHttpPort(serviceURL);
4.利用服务接口调用web 服务
[ReturnObjectType] result = service.methodName();
这里要注意的是“ReturnObjectType”必须是stubs中定义过的或者是JAVA的简单数据类型。
例如:如果原来POJO的methodName()方法返回的是一个String[],则在调用时返回的就是ArrayOfString类型,该类型由XFire定义。
在产生stubs的时侯,xfire会对
用户自定义的数据结构进行重定义。
因此,如果ReturnObjectType是用户自定义类型,则应该采用stubs重定义后的数据结构,而非发布web 服务时使用的原始数据结构。