服务端有这样一个类:
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);
// 这样定义的话客户端可以得到错误提示
// 但缺点是得不到对象,需要自己解析字符串再封装成对象
后来在论坛提问得到第三个方案:
再写一个类
这样接口可以定义为:
正准备开干又发现一个缺点,除了User还有很多类
每个类都写一个XXXResponse来封装又很麻烦
于是向高手讨教,得到又一个方案:
接口定义为
我发现客户端并没有生成User对象,axis2应该是根据接口来生成的wsdl文件
于是我加入一个接口
还有人说可以抛出自定义异常来返回错误提示,这样也可以吧
欢迎大家来讨论,你们都是怎么做的呢?
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类了
还有人说可以抛出自定义异常来返回错误提示,这样也可以吧
欢迎大家来讨论,你们都是怎么做的呢?