webService 使用复杂对象及集合,在实际企业应用中经常使用
1. 服务端程序
package java_soa.getUser2.server;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class GetUserXx {
/**
* 获取用户对象(userbean)
* @param user
* @param address
* @param flag
* @return
*/
public UserBean getUser1(String user,String address, boolean flag){
return new UserBean(user,address,flag);
}
/**
* 返回多个用户对象(list集合对象)
* @param num
* @return
*/
public List<UserBean> getUser2(int num){
List<UserBean> list1=new ArrayList<UserBean>();
UserBean user1= new UserBean();
for (int i=0;i<num;i++){
user1.setUsername("张三");
user1.setAddress("北京市朝阳区");
user1.setFlag(true);
list1.add(user1);
}
return list1;
}
public static void main(String[] args) {
//发布soa地址
Endpoint.publish("http://192.168.8.121:8095/java6ws/java_soa.server.GetUserXx", new GetUserXx());
}
}
用户对象
package java_soa.getUser2.server;
public class UserBean {
/**
* 用户信息
*/
private String username;
private String address;
private boolean flag;
public UserBean() {
}
public UserBean(String username, String address, boolean flag) {
this.username = username;
this.address = address;
this.flag = flag;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}
2. 发布服务端程序后,wsimport 生成客户端代码
文件目录
3. 客户端代码
package java_soa.getUser2.getClient; import java.util.List; import java_soa.getUser2.wsclient.GetUserXx; import java_soa.getUser2.wsclient.GetUserXxService; import java_soa.getUser2.wsclient.UserBean; public class GetUserXxClient { /** * 客户端调用(webService) */ public static void main(String[] args) { GetUserXx UserXx = new GetUserXxService().getGetUserXxPort(); UserBean use1 = new UserBean(); use1 = UserXx.getUser1("张三", "南京市", false); String name = use1.getUsername(); String addr = use1.getAddress(); System.out.println("SOA 取出用户对象 name=="+name+"addr=="+addr ); List<UserBean> list2 =UserXx.getUser2(5); for(int i=0;i<list2.size();i++){ use1 = list2.get(i); int m = i+1; System.out.println("SOA取出第"+m+"条用户信息!"+use1.getUsername()+" "+use1.getAddress()); } } }
4. 返回正确的参数,说明调用正常
5、总结
这里面其实有些细节,需要说明白:
1)、对于复杂对象,必须有一个不带参数的构造方法。
2)、服务端覆盖Object的方法不能在客户端复原,比如toString方法。
3)、服务端的带参数构造方法在客户端失效。
以上三点是非常重要的,如果不知道会很郁闷,老出错还找不到原因。