使用 xfire 开发 web service 应用

转载:oksonic博客 

制作工具: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; i
mport 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 进行单元测试。

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

 新建一个 JUnit case ,这是为了让 IDE 自动增加 JUnit 相关的类库     新建一个 java 文件,名称为 HelloTest.java,此类继承 AbstractXFireSpringTest, 实现一个 createContest 方法,内容如下:

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

package test.com.test; 

import org.apache.xbean.spring.context.ClassPathXmlApplicationContext; 
import org.codehaus.xfire.spring.AbstractXFireSpringTest; 

import org.jdom.Document; 

import org.springframework.context.ApplicationContext; 

public class HelloTest extends AbstractXFireSpringTest { 

    @Override 

    protected ApplicationContext createContext() { 

       return new ClassPathXmlApplicationContext( new String[] { 

              "/org/codehaus/xfire/spring/xfire.xml" , 

              "/META-INF/xfire/services.xml" }); 

  

    } 

    public void testService() throws Exception { 

        Document wsdl = getWSDLDocument( "Hello" ); 

        printNode(wsdl); 

    } 

} 

 

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

为了让 createContext 方法可以找到 services.xml 文件,需要把 Web Services 目录下的 services.xml 拷贝到 src/ META-INF/xfire 目录下    

不用启动 tomcat 直接在 HelloTest.java 文件上点击鼠标右键 Run as --> Junit ... 进行测试,

结果显示绿色条,通过测试!  

关于其它的测试方法请查看《XFire实战.pdf》  

四、和 Spring 集成     新建一个 service 层接口 IHelloService,内容如下:

 ------------------------------------------------------------------------------ package com.test.services;  

 public interface IHelloService {      

public String getName(String name);    

}

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

创建接口的实现 HelloService,内容如下:

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

package com.test.services.impl;   

import com.test.services.IHelloService;   

public class HelloService implements IHelloService {       

        public String getName(String name) {        

                     return "Hello World " + name;     

        }   

}

 

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

 添加 spirng 框架,设置将 applicationContext.xml 文件创建到 WEB-INF 目录下    

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

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

<? xml version = "1.0" encoding = "UTF-8" ?> 

<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >   

< beans >     

< bean id = " helloBean " class = "com.test.services.impl.HelloService" /> 

</ beans >

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

 在 WEB-INF 目录下新建 xfire -servlet.xml 文件,文件内容如下:

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

<? xml version = "1.0" encoding = "UTF-8" ?> 

<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > 

< beans >     

< bean  class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >      

< property name = "urlMap" >

            < map > 

              <!-- 配置 service 名称和 Service Bean -->

               < entry key = "/Hello" > 

                  < ref bean = " hello " /> 

              </ entry >            

            </ map >

</ property >

</ bean >

     < bean id = " hello "        class = "org.codehaus.xfire.spring.remoting.XFireExporter" >        < property name = "serviceFactory" > 

           < ref bean = "xfire.serviceFactory" />

        </ property >

        < property name = "xfire" >

            < ref bean = "xfire" /> 

       </ property >

        < property name = "serviceBean" > 

           < ref bean = " helloBean " />

        </ property >

        < property name = "serviceClass" >

            < value > com.test.services.IHelloService </ value >

        </ property >

     </ bean >

 </ beans >

  

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

   注意:红色字体部份必需一r致,深红色字体部份要和 spring 的配置文件部份一致     修改 web.xml 文件,增加 spring 配置部份,修改 xfire 的名称

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

<? xml version = "1.0" encoding = "UTF-8" ?> 

< web-app xmlns = "http://java.sun.com/xml/ns/j2ee" 

    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" version = "2.4" 

    xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > 

    < context-param > 

       < param-name > contextConfigLocation </ param-name > 

       < param-value > 

           /WEB-INF/applicationContext.xml 

           classpath:org/codehaus/xfire/spring/xfire.xml 

       </ param-value > 

    </ context-param > 

    < listener > 

       < listener-class > 

           org.springframework.web.context.ContextLoaderListener 

       </ listener-class > 

    </ listener > 

    < servlet > 

       < servlet-name > xfire </ servlet-name > 

       < servlet-class > 

           org.springframework.web.servlet.DispatcherServlet 

       </ servlet-class > 

       < load-on-startup > 0 </ load-on-startup > 

    </ servlet > 

    < servlet-mapping > 

       < servlet-name > xfire </ servlet-name > 

       < url-pattern > /services/* </ url-pattern > 

    </ servlet-mapping > 

</ web-app > 
  重启服务,进行测试!!!  

  一切正常,现在用一个web service测试工具进行一下测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值