这两天,项目中需要开发一些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 阅读(486)
评论(0) 编辑 收藏 所属分类:
java 开发