XFire webserivce开发的一点感想.

XFire webserivce开发的一点感想.
这两天,项目中需要开发一些webservice接口,我选用了XFire框架,原来一直在用AXIS。

很多朋友都在讨论XFire和AXIS的优劣,就我而言,更喜欢XFire,至少目前是如此。

最讨厌axis要生成一段东西,才能在wsdd文件注册服务,很是麻烦。而且,调试时要是设成debug,那可就惨了,一大堆用户信息,出了异常还不好捕捉。相比之下,XFire的开发就要简单的点多了,包括代码开发,配置,还是返回自定义类型,真是easy。不过,客户端调用时(动态模式或根据WSDL生成Client Stub),返回的自定义类型是否能顺利取得,到时需要研究一下。

今天,就返回类型问题困了好久,还好已经解决了。

对象的属性、函数的参数和返回值如果为int、String、Date等普通类型以及由普通类型组成的复杂对象都无需定义。我见到只有两种情况需要定义:

  • 无法使用泛型定义Collection中元素的类型时。
  • 需要为属性定义不同的名字,或者定义复杂对象里的某些属性不要输出。
若是遇害到上述情况的话,需要进行aegis配置,文件名应与接口的文件名相同,并且放在同一目录下,如UserService.java,则定义一下UserService.aegis.xml文件,定义内容如下:
 1  <? xml version="1.0" encoding="UTF-8" ?>
 2  < mappings >
 3       < mapping >
 4           < method  name ="getResources" >
               <
!--配置 getResources服务的返回值,List内对象为 Resource-->
 5               < return-type  componentType ="com.test.Resource"   />
 6           </ method >
 7          
 8           < method  name ="getAuthentication" >
 9               < return-type  componentType ="com.test.Authentication"   />
10           </ method >
11       </ mapping >
12  </ mappings >

若返回的 Javabeans 存在 Collections 时,需要定义一个与javabean相关的文件名,如User .aegis.xml,并且放在相同的目录下:
<? xml version="1.0" encoding="UTF-8" ?>
< mappings >
    
< mapping >
        
<!-- User bean  ,包含了一个  List  ,  其中的对象是Resource   -->
        
< property  name ="resources"  componentType ="com.test.Resource"   />
        
<!-- 配置User类,忽略内嵌的roles属性不要输出XML -->
        
< property  name ="roles"  ignore ="true"   />
    
</ mapping >
</ mappings >


有空将XFire使用总结一下,也贴出来。

你可能感兴趣的:(XFire webserivce开发的一点感想.)