0

0

XFire构建web service客户端的五种方式

高洛峰

高洛峰

发布时间:2017-01-24 09:23:07

|

1586人浏览过

|

来源于php中文网

原创

这里并未涉及到jsr 181 annotations 的相关应用,具体的三种方式如下

① 通过WSDL地址来创建动态客户端 
② 通过服务端提供的接口来创建客户端 
③ 使用Ant通过WSDL文件来生成客户端

第一种方式:通过WSDL地址来创建动态客户端

package com.jadyer.client;
import java.net.MalformedURLException;
import java.net.URL;
import org.codehaus.xfire.client.Client;
/**
 * 通过WSDL来创建动态客户端
 * @see 此时需要在项目中引入XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries
 */
public class ClientFromWSDL {
 public static void main(String[] args) throws MalformedURLException, Exception {
 Client client = new Client(new URL("http://127.0.0.1:8080/XFire_demo/services/XFireServer?wsdl"));
 Object[] results11 = client.invoke("sayHello", new Object[]{"Jadyer22"});
 System.out.println(results11[0]);
 }
}

   

Multiavatar
Multiavatar

Multiavatar是一个免费开源的多元文化头像生成器,可以生成高达120亿个虚拟头像

下载

第二种方式:通过服务端提供的端口来创建客户端

package com.jadyer.client;
import java.net.MalformedURLException;
import java.util.List;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import com.jadyer.model.Person;
import com.jadyer.model.User;
import com.jadyer.server.HelloService;
/**
 * 通过Web服务端提供的接口来创建客户端
 * @see 客户端必须提供一个与服务端完全一致的接口,包名也要一致
 * @see 在本例中,需要在客户端(即该项目)中提供HelloService.java接口,以及Person和User两个POJO类
 * @see 并且此时需要在项目中引入XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries
 */
public class ClientFromInterface {
 public static void main(String[] args)throws MalformedURLException{
 //首先使用XFire的ObjectServiceFactory从HelloService接口创建一个服务模型serviceModel
 //serviceModel包含服务的说明,换句话说,就是服务的元数据
 //Create a metadata of the service
 Service serviceModel = new ObjectServiceFactory().create(HelloService.class);
 //访问的地址
 String serviceURL = "http://127.0.0.1:8080/XFire_demo/services/XFireServer";
 //通过查看org.codehaus.xfire.client.XFireProxyFactory源码发现
 //下面两行代码与这里直接new XFireProxyFactory()的作用是等效的
 //XFire xfire = XFireFactory.newInstance().getXFire();
 //XFireProxyFactory factory = new XFireProxyFactory(xfire);
 //为XFire获得一个代理工厂对象
 //Create a proxy for the deployed service
 XFireProxyFactory factory = new XFireProxyFactory();
 //通过proxyFactory,使用服务模型serviceModel和服务端点URL(用来获得WSDL)
 //得到一个服务的本地代理,这个代理就是实际的客户端
 HelloService client = (HelloService)factory.create(serviceModel, serviceURL);
 /**
  * Invoke the service
  * @see 调用服务的本地代理(即实际的客户端)中的方法,便得到我们需要的WebServcie
  */
 /*--处理简单对象--*/
 String serviceResponse = client.sayHello("Jadyer11");
 System.out.println(serviceResponse);
 /*--处理对象--*/
 User u = new User();
 u.setName("Jadyer99");
 Person pp = client.getPerson(u);
 System.out.println(pp.getName());
 /*--处理List--*/
 List personList = client.getPersonList(24, "Jadyer88");
 for(Person p : personList){
  System.out.println(p.getName());
 }
 }
}

这是它要用到的接口和两个POJO类

/**
 * Web服务提供给客户端的接口
 * @see 这是第二种方式创建的客户端,要用到的接口
 */
package com.jadyer.server;
import java.util.List;
import com.jadyer.model.Person;
import com.jadyer.model.User;
public interface HelloService {
 public String sayHello(String name);
 public Person getPerson(User u);
 public List getPersonList(Integer age, String name);
}
/**
 * 第二种方式创建的客户端,要用到的两个POJO类
 */
package com.jadyer.model;
public class User {
 private String name;
 /*--getter和setter略--*/
}
package com.jadyer.model;
public class Person {
 private Integer age;
 private String name;
 /*--getter和setter略--*/
}

 

第三种方式:使用Ant通过WSDL文件来生成客户端

package com.jadyer.client;
/**
 * 使用Ant通过WSDL生成客户端
 * @see 这里的ClientFromAnt.java是我自己创建的,并非Ant生成
 * @see 这里要用到的JAR有:xfire-all-1.2.6.jar以及//xfire-distribution-1.2.6//lib//目录中的所有JAR包
 * @see 我们需要把这些JAR包都拷贝到Web Project//WebRoot//WEB-INF//lib//目录中
 * @see 然后把build.xml和MyFirstXFireServer.wsdl都拷贝到下Web Project的根目录下即可
 * @see 关于MyFirstXFireServer.wsdl文件,是我在WebServices服务启动后
 * @see 访问http://127.0.0.1:8080/XFire_demo/services/XFireServer?wsdl然后将其另存得到的
 */
public class ClientFromAnt {
 public static void main(String[] args) {
 XFireServerClient client = new XFireServerClient();
 //String url = "http://127.0.0.1:8080/XFire_demo/services/XFireServer";
 //String result = client.getXFireServerHttpPort(url).sayHello("Jadyer33");
 //上面的两行代码,与下面的这一行代码,同效~~
 String result = client.getXFireServerHttpPort().sayHello("Jadyer33");
 System.out.println(result);
 }
}

用到的Ant文件,如下



 
 
  
 
 
 
 
 
 

也可以使用下面的这个Ant文件



 
 
 
 
  
 
 
 
 
 
 

   

最后我再把MyFirstXFireServer.wsdl的内容,附加上



 
 
  
  
   
   
   
  
  
  
  
   
   
   
  
  
 
 
 
 
 
 
 
 
 
 
  
  
  
  
 
 
 
 
 
  
  
  
  
  
  
  
 
 
 
 
  
 
 

   

第四种方法

这种方法用到了spring的jar包,是前几天在找XFire+Spring的资料的时候看到的,在这里也是做个记录。同样的,这种方法和上面所提到的第二种方法在客户端都需要与服务器一样的接口,包名也必须一样。

(1)在src目录下新建client.xml(名字并非特定)




 

 
 
 service.MathService
 
 
http://localhost:8080/myservice/mathWebService?wsdl
 
 

   

(2)在程序中调用服务代码非常简单

ApplicationContext ctx = new ClassPathXmlApplicationContext("client.xml");
MathService mathService = (MathService)ctx.getBean("MathService");
int result = mathService.add(int one,int two);

   

第五种办法

先获取到wsdl文件,命名为mathWebService.wsdl放在客户端的src目录下,接着通过程序访问该wsdl文件,并调用需要的方法。

String wsdl = "mathWebService.wsdl " ; // 对应的WSDL文件
Resource resource = new ClassPathResource(wsdl);
Client client = new Client(resource.getInputStream(), null ); // 根据WSDL创建客户实例
Object[] objArray = new Object[ 2 ];
objArray[ 0 ] = 2 ;
obiArray[1] = 3;
 // 调用特定的Web Service方法
Object[] results = client.invoke( " add " , objArray);
System.out.println( " result: " + results[ 0 ]);

   

对于这几种方法,第一种方法如果传递的参数为服务器端的实体对象,这点好像比较麻烦,不知道在客户端建立和服务器端相同的实体类行不行,没有实践,返回结果如果是复杂数据类型的话不知道有没有什么问题,或者如何转换,没有深入研究。而且我个人觉得方法调用不是那么直观。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持PHP中文网!

更多XFire构建web service客户端的五种方式相关文章请关注PHP中文网!

相关文章

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

33

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

32

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

36

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

7

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

11

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号