热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

XFire构建webservice客户端的五种方式

本篇文章主要介绍了XFire构建webservice客户端的五种方式。具有很好的参考价值,下面跟着小编一起来看下吧

这里并未涉及到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]); 
 } 
} 

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

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文件,如下

<&#63;xml version="1.0" encoding="UTF-8"&#63;> 
 
  
  
   
  
  
  
  
  
  
 

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

<&#63;xml version="1.0" encoding="UTF-8"&#63;> 
 
  
  
  
  
   
  
  
  
  
  
  
 

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

<&#63;xml version="1.0" encoding="UTF-8"&#63;> 
 
  
  
   
   
    
    
    
   
   
   
   
    
    
    
   
   
  
  
  
  
  
  
  
  
  
  
   
   
   
   
  
  
  
  
  
   
   
   
   
   
   
   
  
  
  
  
   
  
  
 

第四种方法

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

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

<&#63;xml version="1.0" encoding="UTF-8"&#63;> 
 
 
 

 
 
 service.MathService
 
 
http://localhost:8080/myservice/mathWebService&#63;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 ]);

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

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


推荐阅读
  • Spring Boot 和 Spring Cloud 是 Spring 生态系统中的重要组成部分,各自具有独特的特性和应用场景。Spring Boot 通过简化配置和自动配置机制,显著提高了开发和部署效率,减少了传统 Spring 应用中繁琐的 XML 配置文件需求。而 Spring Cloud 则在此基础上进一步提供了分布式系统的解决方案,包括服务发现、配置管理、断路器等高级功能,适用于微服务架构的构建和管理。本文将深入探讨两者的核心差异,并分析其各自的最佳应用场景。 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • HTTP请求与响应机制:基础概览
    在Web浏览过程中,HTTP协议通过请求和响应报文实现客户端与服务器之间的通信。当用户访问一个网页时,浏览器会发送一个HTTP请求报文至服务器,服务器接收到请求后,会生成并返回一个HTTP响应报文。这两种报文均包含三个主要部分:起始行、头部字段和消息体,确保了数据的有效传输和解析。 ... [详细]
  • 如何在Linux系统中利用crontab定时执行Shell脚本任务?
    在Linux系统中,如何实现定时执行任务脚本?在服务器日常运维过程中,经常需要定期执行某些任务,例如数据库备份、日志文件切割等。通过使用crontab工具,可以轻松配置这些周期性任务,确保它们按时自动运行,提高系统管理效率和可靠性。 ... [详细]
  • 来宾 | Vmware ESXi 平台下的虚拟机在线管理与技术支持
    来宾 | Vmware ESXi 平台下的虚拟机在线管理与技术支持 ... [详细]
  • Java服务问题快速定位与解决策略全面指南 ... [详细]
  • 基于Java和JSP的电子医疗记录管理平台
    随着信息技术的快速发展,各类管理系统已在各行各业得到广泛应用。传统的人工管理模式已逐渐无法满足现代需求。本文介绍了一种基于Java和JSP技术开发的电子医疗记录管理平台,旨在提高医疗行业的信息化水平和管理效率。该平台通过整合先进的数据库技术和Web开发框架,实现了医疗记录的高效存储、查询和管理,为医护人员提供了便捷的操作界面和强大的数据支持。 ... [详细]
  • 在数据库管理中,计算字段(也称为计算列)是一种重要的技术手段。计算字段通过在表定义中使用表达式或函数,自动生成并存储计算结果,从而提高查询效率和数据一致性。本文将详细介绍计算字段的创建方法、优化技巧及其在实际应用中的案例,帮助读者更好地理解和运用这一功能。 ... [详细]
  • 理工科男女不容错过的神奇资源网站
    十一长假即将结束,你的假期学习计划进展如何?无论你是在家中、思念家乡,还是身处异国他乡,理工科学生都不容错过一些神奇的资源网站。这些网站提供了丰富的学术资料、实验数据和技术文档,能够帮助你在假期中高效学习和提升专业技能。 ... [详细]
  • Java并发环境下如何确保数据添加的唯一性? ... [详细]
  • 《软件测试精要》深度解析与实战经验分享
    《软件测试精要》深度解析与实战经验分享,系统梳理了软件测试的核心概念与关键原则,结合实际项目中的测试经验和教训,详细探讨了测试分类、测试权衡要素、测试效率、测试覆盖率以及测试框架的引入和用例设计等内容,为读者提供了全面而实用的指导。 ... [详细]
  • 在Linux环境下,本文详细探讨了Apache服务器中CGI技术的应用与实现。首先,通过使用yum包管理器安装了必要的软件,如PHP。安装完成后,对Apache服务器进行了配置,确保CGI功能正常运行。此外,还介绍了如何编写和调试CGI脚本,以及如何在实际环境中部署这些脚本以提供动态网页内容。实验结果表明,通过合理的配置和优化,Apache服务器能够高效地支持CGI应用程序,为用户提供丰富的交互体验。 ... [详细]
  • 本文首先对信息漏洞的基础知识进行了概述,重点介绍了几种常见的信息泄露途径。具体包括目录遍历、PHPINFO信息泄露以及备份文件的不当下载。其中,备份文件下载涉及网站源代码、`.bak`文件、Vim缓存文件和`DS_Store`文件等。目录遍历漏洞的详细分析为后续深入研究奠定了基础。 ... [详细]
  • 期末Web开发综合实践项目:运用前端技术打造趣味小游戏体验
    期末Web开发综合实践项目中,学生通过运用HTML、CSS和JavaScript等前端技术,设计并实现了一款趣味性十足的小游戏。该项目不仅检验了学生对前端基础知识的掌握情况,还提升了他们的实际操作能力和创意设计水平。视频链接展示了项目的最终成果,直观呈现了游戏的互动性和视觉效果。 ... [详细]
author-avatar
kobe0390
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有