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

 

下载地址: http://this.oksonic.cn

在这里请大家帮忙,有那位朋友使用过 xfire 开发客户端的话,请与我联系!

联系方法见文章结尾处

 

制作工具:Eclipse3.2   MyEclipse5.0m2   Tomcat5.5.x

 

一、一个简单的 web service

 

   新建一个 web service 工程,名称为 xfire

 

   新建一个 java 文件,名称为 Hello.java,内容如下:

-------------------------------------------------------------------------------------

package com.test;

 

public class Hello {

 

    public String getName(String name){

       return "Hello world " + name;

    }

}

-------------------------------------------------------------------------------------

 

  修改Web Services目录下的 services.xml 文件,内容如下:

-------------------------------------------------------------------------------------

< beans xmlns = "http://xfire.codehaus.org/config/1.0" >

    < service >

       < name > Hello </ name >

       < namespace > http://www.oksonic.cn/xfire </ namespace >

       < serviceClass > com.test.Hello </ serviceClass >

    </ service >

</ beans >

-------------------------------------------------------------------------------------

  < name > Hello </ name >   服务名称

  < serviceClass > com.test.Hello </ serviceClass >   服务类

 

  现在可以部署项目,使用以下链接访问:

  http://localhost/xfire/services/Hello?wsdl

  注:我的端口已经修改为80,如果没有修改过的话请使用 http://localhost:8080/xfire/services/Hello?wsdl

 

  网上原有的教程中提到可以使用 http://localhost/xfire/services/ 访问,但测试时出现无法连接

 

  页面中出现 xml 文件内容表示服务正常

 

 

二、使用 jsr181 风格

 

--------------------- 介绍 摘抄自 XFire 实战  ------------------------

  JSR 181通过标准化一个易于学习且可以快速开发的Web服务简单编程模型,从而刺激了对Web服务的采用。一直以来,J2EE开发人员要开发和部署Web服务就必须掌握相当多的信息。通过使用J2SE 5.0中的新增注释功能,Java软件源代码可以使用JSR 181注释进行注释,从而声明式地定义所需的Web服务行为。这使开发人员可以将注意力集中在Web服务的应用逻辑上而无需担心复杂的API、协议和部署描述符。

 

BEA官方网站有一篇 web服务元数据简介 ,对理解JSR 181规范很有帮助。

 

这一节的例子和上一节的例子很相似,或者通过使用java注释,比上一节的POJO稍微复杂了一点。不是说JSR 181节省了很多的配置信息吗?鄙人认为可以从这个方面来理解,正常情况下,POJO如果配置到其他webservices框架下,比如axis2、Celtix、weblogic等容器中,必然需要编写适合这些容器的配置文件,以便这些容器能够识别这个POJO类是wenservices,并根据配置文件中的比如命名空间、参数类型、web服务的方法等信息提供web服务。而通过jsr 181规范中的定义可以自动识别这些信息,这样这些信息不必在每个容器中所配置,这些容器通过java注释就可以得到这些信息,所以说jsr181在这方面进行了简化。XFire通过services.xml文件得到哪个类被定义为web服务, XFire可以通过java注释来获取web服务的相关信息。

-------------------------------------------------------------------------------------

 

  修改 Hello.java 文件,内容如下:

-------------------------------------------------------------------------------------

package com.test;

 

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebResult;

import javax.jws.WebService;

 

@WebService (name= "Hello" ,serviceName= "Hello" ,

       targetNamespace= "http://www.oksonic.cn/xfire" )

public class Hello {

 

    @WebMethod

    @WebResult

    public String getName( @WebParam String name){

       return "Hello world " + name;

    }

}

-------------------------------------------------------------------------------------

 

  修改 services.xml 文件,内容如下:

-------------------------------------------------------------------------------------

< beans xmlns = "http://xfire.codehaus.org/config/1.0" >

    < service >

       < serviceClass > com.test.Hello </ serviceClass >

       < serviceFactory > jsr181 </ serviceFactory >

    </ service >

</ beans >

-------------------------------------------------------------------------------------

 

  启动服务,现次测试,没什么变化,服务正常

 

三、对 xfire 进行单元测试

 

--------------------- 介绍 摘抄自 XFire 实战  ------------------------

  你不必发布到 tomcat 等容器中就可以进行测试,常用的测试类常继承 AbstractXFireTest 抽像类。

AbstractXFireSpringTest 类又实现了 AbstractXFireTest 类,AbstractXFireTest 类是 TestCase

的子类,所以你可以使用 junit 进行单元测试。

------------------------------------------------------------------------------