论坛首页 Java企业应用论坛

WebService接口设计遇到的问题及解决过程

浏览 2409 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (13) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-03  
服务端有这样一个类:

public class User {
   private int id;
   private String name;
   ...
}

定义查询接口的时候有我想到两个方案:
public User[] getUsers(String userName, String pwd, int groupId);
// 这样的定义客户端调用的时候只有两种结果,一是得到要查询的数据,一是
// 得到空数组,然后缺点就是得不到错误提示,是密码不对还是group不存在
// 还是其它原因。。。

public String getUsers(String userName, String pwd, int groupId);
// 这样定义的话客户端可以得到错误提示
// 但缺点是得不到对象,需要自己解析字符串再封装成对象

后来在论坛提问得到第三个方案:
再写一个类
public class UserResponse {
   private String msg;
   private User[] users;
   ...
}


这样接口可以定义为:
public UserResponse getUsers(String userName, String pwd, int groupId);
//然后在server-config.wsdd里加入<beanMapping>
//这样客户端能得到错误提示和User[]了


正准备开干又发现一个缺点,除了User还有很多类
每个类都写一个XXXResponse来封装又很麻烦

于是向高手讨教,得到又一个方案:
接口定义为
public Object[] getUsers(String userName, String pwd, int groupId);
//在实现这个方法时,将message放入object[0], User[] 放入object[1]
//这样就不用写那么多类了
//不过客户端又要多做一点事情,就是将object[1]强制转换成相应的类型


我发现客户端并没有生成User对象,axis2应该是根据接口来生成的wsdl文件
于是我加入一个接口
public void doNothing(User user, XXX xxx ....);
// 这样客户端就能生成User类了


还有人说可以抛出自定义异常来返回错误提示,这样也可以吧

欢迎大家来讨论,你们都是怎么做的呢?
   发表时间:2009-07-03  
public User[] getUsers(String userName, String pwd, int groupId)throws XXXException

自定义异常
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics