XFire 开发小结.

前段时间,项目中使用了XFire开发Webservice,现将开发过程小结一下,以备后查。

一、配置web.xml,在Web应用中增加XFire的入口

注意XFire已有了自己的Servlet,不再依赖Spring MVC的DispatchServlet,也就远离了大家不熟悉的Spring MVC URL Mapping,与Spring达致完美的整合。
这里指定了路径为/service/* ,即WebService的URL会被默认生成为http://localhsot:8080/test/service/ServiceName,其中ServiceName默认为下面的接口名。

 

二、集成Spring

在spring能找到的config目录下,新建applicationContext-xfire.xml文件:

 

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" >
< beans  default-autowire ="byName"  default-lazy-init ="true" >
    
<!--  传统方式下XFire-Spring导出POJO为Web服务的配置文件 -->

    
<!-- 引入XFire的预配置文件 -->
    
< import  resource ="classpath:org/codehaus/xfire/spring/xfire.xml" />

    
<!-- XFire WebService 基类 -->
    
< bean  id ="baseWebService"  class ="org.codehaus.xfire.spring.remoting.XFireExporter"  lazy-init ="false"
          abstract
="true" >
        
< property  name ="serviceFactory"  ref ="xfire.serviceFactory" />
        
< property  name ="xfire"  ref ="xfire" />
    
</ bean >

    
<!--  定义被导出的Web Service  -->
    
< bean  id ="userService"  parent ="baseWebService" >
        
< property  name ="serviceBean"  ref ="userServiceImpl" />
        
< property  name ="serviceClass"  value ="com.test.services.UserService" />
    
</ bean >
</ beans >

定义说明:parent为前面定义的基类,serviceClass 为Web Service的接口,serviceBean为Web Service的接口实现类。

 

当然,在spring配置文件中定义userServiceImpl是必不可少的,如在serviceContext.xml中定义如下:

 

若不集成Spring,则需要定义一个services.xml文件,存放在/src/META-INF/services.xml

 

  < beans   xmlns ="http://xfire.codehaus.org/config/1.0" >   
   
< service  >   
     
< name > userService </ name >   
     
< namespace > http://localhost:8080/service/userService </ namespace >   
     
< serviceClass > com.test.service.UserService </ serviceClass >   
     
< implementationClass > com.test.service.UserServiceImpl </ implementationClass >   
   
</ service >   
 
</ beans >  

参数说明:

 

1、name 元素:表示该webService的名称
2、namespace 元素:表示该webService的命名空间
3、serviceClass 元素:表示该webService的接口
4、implementationClass 元素:表示该webService的实现类

 

三、编写窄接口,抽取POJO中要导出的服务

 

从已有的UserManager.java中,抽取出一个窄接口,仅暴露需要导出为WebService的方法。注意UserManger.java是POJO,不需要任何WebService相关代码。

窄接口一方面满足了安全要求,不用整个UserManager所有方法导出为WebService;另一方面,XFire暂时也只支持基于接口的Proxy。

public   interface  UserService {
   List
< User > getUsers();
}

 


四、配置Java-XML Binding
如果返回类型是List或Map,并且里面存放的是自定义类的话,则需要增加一个对于服务接口的配置文件。该文件的命名规则是 接口文件名.aegis.xml。例如接口是UserService.java的话,则此配置文件命名为UserService.aegis.xml。注意此配置文件须与接口放在同一目录下面。

  <? xml version="1.0" encoding="UTF-8" ?>   
 
< mappings >   
   
< mapping  >   
     
< method  name ="getUsers" >   
       
< return-type  componentType ="com.test.domain.User" />   
     
</ method >   
   
</ mapping >   
 
</ mappings >  

getUsers方法返回类型是List,里面装的User对象。对于这种类型的方法,在配置文件中描述了它的返回值类型。

如果返回的类型是Map的话,做法和List一样。但定义的类型,是Map中的Value部分,并且这样的话,Map中Value所存放的对象就必须全部是同一种类啦。

参考资源:
http://wiki.springside.org.cn/display/springside/XFire
http://www.javaeye.com/topic/70005
http://junewolf.javaeye.com/blog/52523

< bean  id ="userServiceImpl"  class ="com.test.services.UserServiceImpl" />

 

     < servlet >  
        
< servlet-name > xfire </ servlet-name >   
        
< servlet-class > org.codehaus.xfire.spring.XFireSpringServlet </ servlet-class >  
    
</ servlet >

    
< servlet-mapping >
        
< servlet-name > xfire </ servlet-name >  
        
< url-pattern > /service/* </ url-pattern >
    
</ servlet-mapping >

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值