您的位置:首页 > 其它

速动画教程第二十五集 使用 xfire 开发 web service 应用

2007-03-28 17:16 941 查看
from:http://www.blogjava.net/oksonic/archive/2006/07/19/59069.html

[align=left]速动画教程第二十五集 使用 xfire 开发 web service 应用 [/align]
[align=left] [/align]
[align=left]下载地址: http://this.oksonic.cn [/align]
[align=left]在这里请大家帮忙,有那位朋友使用过 xfire 开发客户端的话,请与我联系! [/align]
[align=left]联系方法见文章结尾处 [/align]
[align=left] [/align]
[align=left]制作工具:Eclipse3.2 MyEclipse5.0m2 Tomcat5.5.x [/align]
[align=left] [/align]
[align=left]一、一个简单的 web service [/align]
[align=left] [/align]
[align=left] 新建一个 web service 工程,名称为 xfire [/align]
[align=left] [/align]
[align=left] 新建一个 java 文件,名称为 Hello.java,内容如下: [/align]
[align=left]------------------------------------------------------------------------------------- [/align]
[align=left]package com.test; [/align]
[align=left] [/align]
[align=left]public class Hello { [/align]
[align=left] [/align]
[align=left] public String getName(String name){ [/align]
[align=left] return "Hello world " + name; [/align]
[align=left] } [/align]
[align=left]} [/align]
[align=left]------------------------------------------------------------------------------------- [/align]
[align=left] [/align]
[align=left] 修改Web Services目录下的 services.xml 文件,内容如下: [/align]
[align=left]------------------------------------------------------------------------------------- [/align]
[align=left]< beans xmlns = "http://xfire.codehaus.org/config/1.0" > [/align]
[align=left] < service > [/align]
[align=left] < name > Hello </ name > [/align]
[align=left] < namespace > http://www.oksonic.cn/xfire </ namespace > [/align]
[align=left] < serviceClass > com.test.Hello </ serviceClass > [/align]
[align=left] </ service > [/align]
[align=left]</ beans > [/align]
[align=left]------------------------------------------------------------------------------------- [/align]
[align=left] < name > Hello </ name > 服务名称 [/align]
[align=left] < serviceClass > com.test.Hello </ serviceClass > 服务类 [/align]
[align=left] [/align]
[align=left] 现在可以部署项目,使用以下链接访问: [/align]
[align=left] http://localhost/xfire/services/Hello?wsdl [/align]
[align=left] 注:我的端口已经修改为80,如果没有修改过的话请使用 http://localhost:8080/xfire/services/Hello?wsdl [/align]
[align=left] [/align]
[align=left] 网上原有的教程中提到可以使用 http://localhost/xfire/services/ 访问,但测试时出现无法连接 [/align]
[align=left] [/align]
[align=left] 页面中出现 xml 文件内容表示服务正常 [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]二、使用 jsr181 风格 [/align]
[align=left][/align]
[align=left]--------------------- 介绍 摘抄自 XFire 实战 ------------------------ [/align]
[align=left] JSR 181通过标准化一个易于学习且可以快速开发的Web服务简单编程模型,从而刺激了对Web服务的采用。一直以来,J2EE开发人员要开发和部署Web服务就必须掌握相当多的信息。通过使用J2SE 5.0中的新增注释功能,Java软件源代码可以使用JSR 181注释进行注释,从而声明式地定义所需的Web服务行为。这使开发人员可以将注意力集中在Web服务的应用逻辑上而无需担心复杂的API、协议和部署描述符。 [/align]
[align=left] [/align]
[align=left]BEA官方网站有一篇 “ web服务元数据简介 ” ,对理解JSR 181规范很有帮助。 [/align]
[align=left] [/align]
[align=left]这一节的例子和上一节的例子很相似,或者通过使用java注释,比上一节的POJO稍微复杂了一点。不是说JSR 181节省了很多的配置信息吗?鄙人认为可以从这个方面来理解,正常情况下,POJO如果配置到其他webservices框架下,比如axis2、Celtix、weblogic等容器中,必然需要编写适合这些容器的配置文件,以便这些容器能够识别这个POJO类是wenservices,并根据配置文件中的比如命名空间、参数类型、web服务的方法等信息提供web服务。而通过jsr 181规范中的定义可以自动识别这些信息,这样这些信息不必在每个容器中所配置,这些容器通过java注释就可以得到这些信息,所以说jsr181在这方面进行了简化。XFire通过services.xml文件得到哪个类被定义为web服务, XFire可以通过java注释来获取web服务的相关信息。 [/align]
[align=left]------------------------------------------------------------------------------------- [/align]
[align=left] [/align]
[align=left] 修改 Hello.java 文件,内容如下: [/align]
[align=left]------------------------------------------------------------------------------------- [/align]
[align=left]package com.test; [/align]
[align=left] [/align]
[align=left]import javax.jws.WebMethod; [/align]
[align=left]import javax.jws.WebParam; [/align]
[align=left]import javax.jws.WebResult; [/align]
[align=left]import javax.jws.WebService; [/align]
[align=left] [/align]
[align=left]@WebService (name= "Hello" ,serviceName= "Hello" , [/align]
[align=left] targetNamespace= "http://www.oksonic.cn/xfire" ) [/align]
[align=left]public class Hello { [/align]
[align=left] [/align]
[align=left] @WebMethod [/align]
[align=left] @WebResult [/align]
[align=left] public String getName( @WebParam String name){ [/align]
[align=left] return "Hello world " + name; [/align]
[align=left] } [/align]
[align=left]} [/align]
[align=left]------------------------------------------------------------------------------------- [/align]
[align=left] [/align]
[align=left] 修改 services.xml 文件,内容如下: [/align]
[align=left]------------------------------------------------------------------------------------- [/align]
[align=left]< beans xmlns = "http://xfire.codehaus.org/config/1.0" > [/align]
[align=left] < service > [/align]
[align=left] < serviceClass > com.test.Hello </ serviceClass > [/align]
[align=left] < serviceFactory > jsr181 </ serviceFactory > [/align]
[align=left] </ service > [/align]
[align=left]</ beans > [/align]
[align=left]------------------------------------------------------------------------------------- [/align]
[align=left] [/align]
[align=left] 启动服务,现次测试,没什么变化,服务正常 [/align]
[align=left] [/align]
[align=left]三、对 xfire 进行单元测试 [/align]
[align=left][/align]
[align=left]--------------------- 介绍 摘抄自 XFire 实战 ------------------------ [/align]
[align=left] 你不必发布到 tomcat 等容器中就可以进行测试,常用的测试类常继承 AbstractXFireTest 抽像类。 [/align]
[align=left]AbstractXFireSpringTest 类又实现了 AbstractXFireTest 类,AbstractXFireTest 类是 TestCase [/align]
[align=left]的子类,所以你可以使用 junit 进行单元测试。 [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left] [/align]
[align=left] 新建一个 JUnit case ,这是为了让 IDE 自动增加 JUnit 相关的类库 [/align]
[align=left] [/align]
[align=left] 新建一个 java 文件,名称为 HelloTest.java,此类继承 AbstractXFireSpringTest, [/align]
[align=left]实现一个 createContest 方法,内容如下: [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left]package test.com.test; [/align]
[align=left] [/align]
[align=left]import org.apache.xbean.spring.context.ClassPathXmlApplicationContext; [/align]
[align=left]import org.codehaus.xfire.spring.AbstractXFireSpringTest; [/align]
[align=left]import org.jdom.Document; [/align]
[align=left]import org.springframework.context.ApplicationContext; [/align]
[align=left] [/align]
[align=left]public class HelloTest extends AbstractXFireSpringTest { [/align]
[align=left] [/align]
[align=left] @Override [/align]
[align=left] protected ApplicationContext createContext() { [/align]
[align=left] return new ClassPathXmlApplicationContext( new String[] { [/align]
[align=left] "/org/codehaus/xfire/spring/xfire.xml" , [/align]
[align=left] "/META-INF/xfire/services.xml" }); [/align]
[align=left] [/align]
[align=left] } [/align]
[align=left] [/align]
[align=left] public void testService() throws Exception [/align]
[align=left] [/align]
[align=left] { [/align]
[align=left] Document wsdl = getWSDLDocument( "Hello" ); [/align]
[align=left] printNode(wsdl); [/align]
[align=left] } [/align]
[align=left] [/align]
[align=left]} [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left] 为了让 createContext 方法可以找到 services.xml 文件,需要把 Web Services 目录下的 services.xml 拷贝到 src/ META-INF/xfire 目录下 [/align]
[align=left] [/align]
[align=left] 不用启动 tomcat 直接在 HelloTest.java 文件上点击鼠标右键 Run as --> Junit ... 进行测试,结果显示绿色条,通过测试! [/align]
[align=left] 关于其它的测试方法请查看《XFire实战.pdf》 [/align]
[align=left] [/align]
[align=left]四、和 Spring 集成 [/align]
[align=left][/align]
[align=left] 新建一个 service 层接口 IHelloService,内容如下: [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left]package com.test.services; [/align]
[align=left] [/align]
[align=left]public interface IHelloService { [/align]
[align=left] [/align]
[align=left] public String getName(String name); [/align]
[align=left] [/align]
[align=left]} [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left] [/align]
[align=left] 创建接口的实现 HelloService,内容如下: [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left]package com.test.services.impl; [/align]
[align=left] [/align]
[align=left]import com.test.services.IHelloService; [/align]
[align=left] [/align]
[align=left]public class HelloService implements IHelloService { [/align]
[align=left] [/align]
[align=left] public String getName(String name) { [/align]
[align=left] return "Hello World " + name; [/align]
[align=left] } [/align]
[align=left] [/align]
[align=left]} [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left] [/align]
[align=left] 添加 spirng 框架,设置将 applicationContext.xml 文件创建到 WEB-INF 目录下 [/align]
[align=left] [/align]
[align=left] 修改 applicationContext.xml 文件,内容如下: [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left]<? xml version = "1.0" encoding = "UTF-8" ?> [/align]
[align=left]<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > [/align]
[align=left] [/align]
[align=left]< beans > [/align]
[align=left] < bean id = " helloBean " class = "com.test.services.impl.HelloService" /> [/align]
[align=left]</ beans > [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left] [/align]
[align=left] 在 WEB-INF 目录下新建 xfire -servlet.xml 文件,文件内容如下: [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left]<? xml version = "1.0" encoding = "UTF-8" ?> [/align]
[align=left]<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" [/align]
[align=left]"http://www.springframework.org/dtd/spring-beans.dtd" > [/align]
[align=left]< beans > [/align]
[align=left] < bean [/align]
[align=left] class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" > [/align]
[align=left] < property name = "urlMap" > [/align]
[align=left] < map > [/align]
[align=left] <!-- 配置 service 名称和 Service Bean --> [/align]
[align=left] < entry key = "/Hello" > [/align]
[align=left] < ref bean = " hello " /> [/align]
[align=left] </ entry > [/align]
[align=left] </ map > [/align]
[align=left] </ property > [/align]
[align=left] </ bean > [/align]
[align=left] < bean id = " hello " [/align]
[align=left] class = "org.codehaus.xfire.spring.remoting.XFireExporter" > [/align]
[align=left] < property name = "serviceFactory" > [/align]
[align=left] < ref bean = "xfire.serviceFactory" /> [/align]
[align=left] </ property > [/align]
[align=left] < property name = "xfire" > [/align]
[align=left] < ref bean = "xfire" /> [/align]
[align=left] </ property > [/align]
[align=left] < property name = "serviceBean" > [/align]
[align=left] < ref bean = " helloBean " /> [/align]
[align=left] </ property > [/align]
[align=left] < property name = "serviceClass" > [/align]
[align=left] < value > com.test.services.IHelloService </ value > [/align]
[align=left] </ property > [/align]
[align=left] </ bean > [/align]
[align=left]</ beans > [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left] 注意:红色字体部份必需一r致,深红色字体部份要和 spring 的配置文件部份一致 [/align]
[align=left] [/align]
[align=left] 修改 web.xml 文件,增加 spring 配置部份,修改 xfire 的名称 [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left]<? xml version = "1.0" encoding = "UTF-8" ?> [/align]
[align=left]< web-app xmlns = "http://java.sun.com/xml/ns/j2ee" [/align]
[align=left] xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" version = "2.4" [/align]
[align=left] xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > [/align]
[align=left] < context-param > [/align]
[align=left] < param-name > contextConfigLocation </ param-name > [/align]
[align=left] < param-value > [/align]
[align=left] /WEB-INF/applicationContext.xml [/align]
[align=left] classpath:org/codehaus/xfire/spring/xfire.xml [/align]
[align=left] </ param-value > [/align]
[align=left] </ context-param > [/align]
[align=left] < listener > [/align]
[align=left] < listener-class > [/align]
[align=left] org.springframework.web.context.ContextLoaderListener [/align]
[align=left] </ listener-class > [/align]
[align=left] </ listener > [/align]
[align=left] < servlet > [/align]
[align=left] < servlet-name > xfire </ servlet-name > [/align]
[align=left] < servlet-class > [/align]
[align=left] org.springframework.web.servlet.DispatcherServlet [/align]
[align=left] </ servlet-class > [/align]
[align=left] < load-on-startup > 0 </ load-on-startup > [/align]
[align=left] </ servlet > [/align]
[align=left] < servlet-mapping > [/align]
[align=left] < servlet-name > xfire </ servlet-name > [/align]
[align=left] < url-pattern > /services/* </ url-pattern > [/align]
[align=left] </ servlet-mapping > [/align]
[align=left]</ web-app > [/align]
[align=left]------------------------------------------------------------------------------ [/align]
[align=left] 注:红色字体部份为新重点关注部份 [/align]
[align=left] [/align]
[align=left] 重启服务,进行测试!!! [/align]
[align=left] [/align]
[align=left] 一切正常,现在用一个web service测试工具进行一下测试 [/align]
[align=left] [/align]
[align=left] 本集就到这里了!!! [/align]
[align=left] [/align]
[align=left]为了制作更多更好的录像教程,希望大家多多提供相关资料!!! [/align]
[align=left]联系方法: [/align]
[align=left] http://www.oksonic.cn [/align]
[align=left] Email: oksonic@tom.com [/align]
[align=left] QQ: 71279650
[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: