經過一番思考+翻閱資料。于是終極解決方案終于出現,--------------------------------那就是:
用數組.
先看代碼,再討論:
服務端:
?1?package?service;
?2?
?3?import?javax.jws.WebMethod;
?4?import?javax.jws.WebService;
?5?import?javax.jws.soap.SOAPBinding;
?6?
?7?import?modle.UserInfo;
?8?
?9?@WebService(targetNamespace?=?"http://jdk.study.hermit.org/testarray")
10?@SOAPBinding(style?=?SOAPBinding.Style.RPC)
11?public?class?GetArray?{
12?????
13?????@WebMethod
14?????public?UserInfo?[]?sayHello(int?n)?{
15?????????UserInfo?[]?userlist?=?new?UserInfo[n];
16?????????for?(int?i?=?0;?i?<?n;?i++)?{
17?????????????userlist[i]?=?new?UserInfo();
18?????????????userlist[i].setId(i);
19?????????????userlist[i].setName("name"?+?i);
20?????????}
21?????????return?userlist;
22?????}
23?}
客戶端:?2?
?3?import?javax.jws.WebMethod;
?4?import?javax.jws.WebService;
?5?import?javax.jws.soap.SOAPBinding;
?6?
?7?import?modle.UserInfo;
?8?
?9?@WebService(targetNamespace?=?"http://jdk.study.hermit.org/testarray")
10?@SOAPBinding(style?=?SOAPBinding.Style.RPC)
11?public?class?GetArray?{
12?????
13?????@WebMethod
14?????public?UserInfo?[]?sayHello(int?n)?{
15?????????UserInfo?[]?userlist?=?new?UserInfo[n];
16?????????for?(int?i?=?0;?i?<?n;?i++)?{
17?????????????userlist[i]?=?new?UserInfo();
18?????????????userlist[i].setId(i);
19?????????????userlist[i].setName("name"?+?i);
20?????????}
21?????????return?userlist;
22?????}
23?}
?1?package?test;
?2?
?3?import?static?org.junit.Assert.assertNotNull;
?4?
?5?import?java.util.List;
?6?
?7?import?org.hermit.study.jdk.testarray.GetArray;
?8?import?org.hermit.study.jdk.testarray.GetArrayService;
?9?import?org.hermit.study.jdk.testarray.UserInfo;
10?import?org.hermit.study.jdk.testarray.UserInfoArray;
11?import?org.junit.Test;
12?
13?public?class?TestArray?{
14?????@Test
15?????public?void?sayHello()?{
16?????????GetArrayService?service?=?new?GetArrayService();
17?????????assertNotNull(service);
18?????????GetArray?obj?=?service.getGetArrayPort();
19?????????assertNotNull(obj);
20?????????UserInfoArray?usrArray?=?obj.sayHello(5);
21?????????assertNotNull(usrArray);
22?????????List<UserInfo>?usrList?=?usrArray.getItem();
23?????????assertNotNull(usrList);
24?????????for?(UserInfo?info?:?usrList)?{
25?????????????System.out.println(info.getId());
26?????????????System.out.println(info.getName());
27?????????}
28?????}
29?}
?2?
?3?import?static?org.junit.Assert.assertNotNull;
?4?
?5?import?java.util.List;
?6?
?7?import?org.hermit.study.jdk.testarray.GetArray;
?8?import?org.hermit.study.jdk.testarray.GetArrayService;
?9?import?org.hermit.study.jdk.testarray.UserInfo;
10?import?org.hermit.study.jdk.testarray.UserInfoArray;
11?import?org.junit.Test;
12?
13?public?class?TestArray?{
14?????@Test
15?????public?void?sayHello()?{
16?????????GetArrayService?service?=?new?GetArrayService();
17?????????assertNotNull(service);
18?????????GetArray?obj?=?service.getGetArrayPort();
19?????????assertNotNull(obj);
20?????????UserInfoArray?usrArray?=?obj.sayHello(5);
21?????????assertNotNull(usrArray);
22?????????List<UserInfo>?usrList?=?usrArray.getItem();
23?????????assertNotNull(usrList);
24?????????for?(UserInfo?info?:?usrList)?{
25?????????????System.out.println(info.getId());
26?????????????System.out.println(info.getName());
27?????????}
28?????}
29?}
從代碼中看到,我們在服務端返回的是一個對象數組,到了客戶端,已經被自動轉換成我們魂牽夢繞的list,而且是類型安全的。泛型+foreach用起來是多么的愜意。至此,困擾已久的問題終于解決了。
那么這一切到底是為什么呢?
一切要從web service的本質說起,來吧,我們一起復習一下概念:










不同語言,不同平臺間的數據傳遞就是問題的本質。
web servie中盡量不要使用本地語言的對象比如hashmap等,你不能保證調用者使用的語言也有這個對象。
這是一篇很久前寫了一半的文章。后來太忙就擱置了,今天終于補完了。