




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用 XFire 开发 webservice 服务和客户端全攻略收藏XFire 是与 Axis2 并列的新一代 WebService 框架,通过提供简单的 API 支持 WebService 各项标准协议,帮助你方便快速地开发 WebService 应用。相对于 Axis 来说,目前 XFire 相对受欢迎,加上其提供了和 Spring 集成的支持,在目前的 WebService开源社区拥有众多的追随者。并且因为 XFire 为 Spring 提供的支持,使得我们可以很容易在 Spring 中使用 XFire 构建 WebService 应用。XFire 与 Axis2 相比具有如下特征:l
2、支持一系列 WebService 的新标准-JSR181、WSDL2.0、JAXB2、WS-Security等;l 使用 Stax 解释 XML,性能有了质的提高。XFire 采用 Woodstox 作 Stax 实现;l 容易上手,可以方便快速地从 pojo 发布服务;l 支持 SpringPico、Plexus、Loom 等容器;l 灵活的 Binding 机制,包括默认的 Aegis,xmlbeans,jaxb2,castor;l 高性能的 SOAP 栈设计;l 支持 SpringPico、Plexus、Loom 等容器。XFire 与 Axis1 性能的比较如下:lXFire 比 Ax
3、is1.3 快 2-6 倍;lXFire 的响应时间是 Axis1.3 的 1/2 至 U1/5。XFire 在 WebService 框架中开始较晚,它从现有的框架中借鉴了许多优秀的理念,力争将WebService 的应用开发难度降到最低。此外,还提供了各种绑定技术、支持多种传输协议,对WebService 体系中许多新的规范提供了支持。下面让我们来看一个 XFire 于 Spring 集成的 helloWorld 的简单例子。一.实现的功能和特点本例具有如下功能和特点:1)基于 J2EE 平台的 WebService 服务;2)开发方便,配置简单;3)与 spring 无缝集成。XFire
4、 是完全基于流数据处理进行工作的系统,这意味着 XFire 不是将整个 SOAP 文档缓存在内存中,而是以管道的方式接收 SOAP 流数据。这种工作方式的转变带来了可观的性能回报,同时节省了内存的占用。XFire 从管道中接收一个 SOAP 请求到返回一个 SOAP 响应,会经历一系列的阶段。在管道调用的任何一个阶段,XFire 都可以添加一些额外的 Handler,在对消息进行加工处理后再传入到下一个阶段中。在 SOAP 请求消息对 WebService 发起真正调用之前,分别会经过传输、预转发、转发、策略实施、用户信息处理、预调用、服务调用等阶段。二.开发环境笔者的开发环境描述如下:1)j
5、dk:1.5 版本;2)Tomcat:5.5.20;3)MyEclipse:5.1.1GA。三.开发步骤1 .工程与环境的建立在 MyEclipse 中新建 Web 工程,名为 webservice_helloworld。选择该工程后,点击右键选择MyEclipse-AddWebServiceCapabilities,弹出 AddWebServiceCapabilities 对话框,点击Next,弹出 ProjectLibraryConfiguration对话框, 默认选择 CoreLibraries,点击“Finish”按钮, 完成 XFire核心包的添加。为了后续的客户端的测试,还需读者加
6、入 commons-httpclient.jar 包到 WEB-INF/lib 下。部署后可看到此时 WEB-INF/lib 的 jar 包列表如下:activation-1.1.jar、commons-beanutils-1.7.0.jar、commons-codec-1.3.jar、commons-httpclient.jar、commons-logging-1.0.4.jar、jaxen-1.1-beta-9.jar、jaxws-api-2.0.jar、jdom-1.0.jar、jsr173_api-1.0.jar、mail-1.4.jar、saaj-api-1.3.jar、saaj-i
7、mpl-1.3.jar、spring-1.2.6.jar、stax-api-1.0.1.jarwsdl4j-1.5.2.jarwstx-asl-3.0.1.jarxbean-2.1.0.jarxbean-spring-2.5.jarxfire-aegis-1.2.2.jarxfire-annotations-1.2.2.jarxfire-core-1.2.2.jarxfire-java5-1.2.2.jarxfire-jaxws-1.2.2.jar、xfire-jsr181-api-1.0-M1.jar、xfire-spring-1.2.2.jar、XmlSchema-1.1.jar为了后续的
8、开发和测试,在 src 目录下分别建立 test 和 webservice 目录,分别用于存放测试文件和webservice 的相关类。2 .WebService 实现的编写在本例中,我们只是做一个 helloWorld 的简单例子。WebService 服务端提供一个根据输入的名字信息回复相应的 helloWorld 信息的。例如,当名字为“阿蜜果”时,恢复信息为“hello,阿蜜果。下面让我们一步一步来开始进行编码。1)web.xml 的配置一般情况下,我们通过 HTTP 作为 WebService 的传输协议,这样我们只需启动一个 Web 服务器(如Tomcat,在本例中使用的是 Tom
9、cat5.5.20) ,这样客户端就可以通过 HTTP 访问到 WebService 服务。 为了集成 Spring 容器,XFire 专门提供一个 XFireSpringServlet,我们可以在 web.xml 中配置该 Servlet,将Spring 容器中定义的 WebService 在某个 URI 下发布。为了能正确使用 XFire,需在 web.xml 中进行相应配置,在该文件中配置 XFire 的 servlet 和servlet-mapping。同时因为本实例需要将 XFire 集成到 Spring 中,因而需要在 web.xml 文件中加载Spring 的相应配置文件。在本实
10、例中,我们首先在 WEB-INF 下建立两个配置Spring 配置文件,一个为 applicationContext.xml,该文件用来定义本工程的 bean,一个为 xfire-servlet.xml,用来配置 XFire 的相关 bean。修改后的 web.xml 的内容如下所示:XFireServicecontextConfigLocation/WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xmlorg.springframework.web.context.ContextLoaderListenerorg.springfra
11、mework.web.util.IntrospectorCleanupListenerxfireorg.springframework.web.servlet.DispatcherServletxfire*.wsxfireServletorg.codehaus.xfire.spring.XFireSpringServletxfireServlet/service/*2)WebService 的接口类 HelloWorld.java 和对应实现类 HelloWorldImpl.java为了用 WebService 完成 HelloWorld 功能,我们首先在 src/webservice 目录下
12、建立接口类HelloWold.java。它仅包含一个 sayHelloWorld(Stringname)的方法,其详细内容如下:packagewebservice;/*/*HelloWorld 的接口类.*/publicinterfaceHelloWorld/*/*对名字为 name 的人打招呼.paramname 名字return 返回打招呼的字符串*/StringsayHelloWorld(Stringname);我 们 还 需 要 建 立 一 个 对 应 的 实 现 类 , 来 实 现HelloWorldImpl.java。该 类 的 详 细 内 容 如下:packagewebservi
13、ce;/*/*HelloWorld 的实现类.*/publicclassHelloWorldImplimplementsHelloWorldpublicStringsayHelloWorld(Stringname)StringhelloWorld=hello,+name;returnhelloWorld;3)Spring 配置文件 applicationContext.xml 和 xfire-servlet.xml 的配置首先我们在 applicationContext.xml 文件中配置对应的 beanHelloWorldBean,该xml 文件的内容如下:sayHelloWorld 的功能
14、,该实现类即为这个配置文件很简单,在此不详述。XFire 为 Spring 提供了方便易用的导出器 XFireExporter,借助该导出器的支持,我们可以在 Spring 容器中将一个 POJO 导出为 WebServiceoHelloWorld 是业务服务类,在此拥有一个sayHelloWorld 的方法,我们希望将此方法开放为 WebServiceo在实际应用中,如果某个类具有众多的方法,而其中的某些方法不需要开放为 WebService 的情况下,我们可以定义一个窄接口,该接口中只需定义那些开放为 WebService 的业务方法。将一个业务类所有需要开放为 WebService 的方
15、法通过一个窄接口来描述是值得推荐的作法,这让 WebService 的接口显得很“干净”。其次,XFire 的导出器也需要服务接口的支持,因为它采用基于接口的动态代理技术。窄接口中的方法在真实的系统中可能需要引用其它的业务类或 DAO 获取数据库中的真实数据,为了简化实例,我们在此简化了实例。下面让我们看看在 xfire-servlet.xml 文件中导出器的设置,该文件内容如下:在上面的配置中,我们可以看到,在该配置文件中引入了 xfire.xml 这个 Spring 配置文件。它是在 XFire 核心 JAR 包中拥有一个预定义的 Spring 配置文件,它定义了 XFire 在 Spri
16、ng中必须用到的一些 Bean 和资源,需要引入这个预定义的配置文件。从该配置文件中可以看出,我们通过 XFireExporter 将业务类导出为 WebService,对于任何导出器,我们都需要引入 XFire 环境, 即 serviceFactory 和 xfire,这是标准的配置。 ServiceFactory 是 XFire 的核心类, 它可以将一个 POJO生成为一个 WebServiceo在本实例中,我们通过定义一个 baseWebService,其余的 webService 配置都将该 bean 作为父 bean,这样可以简化 Spring 的配置,不需要多次引入 service
17、Factory 和 xfire。3.WebService 的测试在上一步操作完成之后,我们的这个简单的 WebService 已经编写完毕,下面让我们来看看自己的劳动成果吧。在浏览器中输入地址:http:/localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl,我们可以看至UHelloWorldService对应的WSDL信息, 阅读这个WSDL文档, 我们可以知道HelloWorld的 sayHelloWorld 方法已经被成功地发布为 WebService 了。只要拿到这个 WSDL 就可以开发相应的客户端调用程序了。X
18、Fire 为访问服务端 WebService 提供了各种方便的方式:我们一般根据服务地址和窄接口类创建客户调用程序。在不能获得服务窄接口类的情况下,XFire 允许我们通过 WSDL 文件生成客户端调用程序,通过指定服务接口的方式调用服务。1)通过 WSDL 文件生成客户端调用程序首先我们通过 http:/localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl 我们可以获得WSDL 文件 HelloWorldService.wsdl,并将其放在 src 目录下面, 接着我们通过程序访问该 WSDL 文件,并调用需测试的方法。
19、此时测试类 WebServiceClientTest.java 的内容如下所示:packagetest;importorg.codehaus.xfire.client.Client;importorg.springframework.core.io.ClassPathResource;importorg.springframework.core.io.Resource;importwebservice.HelloWorld;/*/*Copyright2007GuangZhouAmigo.*Allrightreserved.*HelloWorld 的 webservice 的测试类.*autho
20、rAmigoXie*version1.0*Creationdate:2007-9-16-下午 05:36:05*/publicclassWebServiceClientTestHelloWorldhelloWorld=null;publicstaticvoidmain(Stringargs)throwsExceptionWebServiceClientTesttest=newWebServiceClientTest();test.testClient();)publicvoidtestClient()throwsExceptionStringwsdl=HelloWorldService.wsd
21、l;/对应的 WSDL 文件Resourceresource=newClassPathResource(wsdl);Clientclient=newClient(resource.getInputStream(),null);/根据 WSDL 创建客户实例objArray0=阿蜜果;/调用特定的 WebService 方法ObjectobjArraynewObject1;Objectresults=client.invoke(sayHelloWorld,objArray);System.out.println(result:+results0);运行该类,可得到如下输出结果:result:he
22、llo,阿蜜果可看出运行结果正确。2)根据服务地址创建客户端调用程序接着让我们来看一个根据服务地址创建客户端调用程序的例子。我们可以通过测试类来测试 WebService 的正确性,下面让我们来看一个简单的测试类,首先我们在 src/test 目录建立 WebServiceClientTest.java 文件,并在 src 目录下建立客户端调用的 Spring 配置文件client.xml。在 client.xml 配置文件中我们定义了一个 testWebService 的 bean,该 bean 访问 wsdlDocumentUrl 为http:/localhost:8080/webserv
23、ice_helloworld/HelloWorldService.ws?wsdl 的 WSDL。 该 xml 文件的详细内容如下:webservice.HelloWorldhttp:/localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl在 WebServiceClientTest.java 文件中获得 HelloWorld,并调用它的 sayHelloWorld 方法来完成测试,该类的详细内容如下所示:packagetest;importorg.springframework.context.ApplicationCont
24、ext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importwebservice.HelloWorld;/*/*HelloWorld 的 webservice 的测试类.*/publicclassWebServiceClientTestHelloWorldhelloWorld=null;publicstaticvoidmain(Stringargs)WebServiceClientTesttest=newWebServiceClientTest();test.testClient();publicvoidtestClient()ApplicationContextctx=newClassPathXmlApplicationContext(clie
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京版英语《Lesson 16》下载
- 江西省宁都县2025年小升初总复习数学精练含解析
- 南方医科大学《阿拉伯语高级视听说(3)》2023-2024学年第二学期期末试卷
- 江苏省南通市港闸区2025年初三总复习质量测试(一)生物试题含解析
- 唐海县2024-2025学年五下数学期末联考模拟试题含答案
- 分析环保政策法规对环保行业的影响和推动作用
- 企业文员年终工作总结模版
- 高中艺术班班主任工作总结模版
- 牡丹江师范学院《工业机器人技术基础》2023-2024学年第二学期期末试卷
- 小学英语译林版三年级起点《Letter time,Song time,Checkout time Ticking time》教案下载
- 慢阻肺课件教学
- 【MOOC】跨文化交际-苏州大学 中国大学慕课MOOC答案
- 2024年4月医学装备质量管理情况简报
- 临床三基考试题库(附答案)
- 塔吊司机指挥安全培训
- 大连理工大学软件学院概率论与数理统计精简版习题解答
- 北师大版数学八年级下册全册教案及反思
- 九宫数独200题(附答案全)
- 保护女方的婚前协议模板范文
- 在线网课知道智慧《信号检测与估计(哈尔滨工程大学)》单元测试考核答案
- 护士延续注册体检表
评论
0/150
提交评论