这两天,项目中需要开发一些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使用总结一下,也贴出来。  
	
posted on 2007-04-19 19:13 
josson 阅读(504) 
评论(0)  编辑  收藏  所属分类: 
java 开发