随笔 - 119  文章 - 3173  trackbacks - 0
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

交友莫独酒,茅台西凤游。
口干古井贡,心徜洋河流。
称多情杜康,趟无量双沟。
赞中华巍巍,无此不销愁。

常用链接

留言簿(68)

随笔分类(136)

随笔档案(122)

最新随笔

搜索

  •  

积分与排名

  • 积分 - 520564
  • 排名 - 93

最新评论

java6 web service无法传递hashmap和arraylist,大失所望之余,不得不思考一下,实际应用中最常用的两个集合对象就是不能传递么?

经过一番思考+翻阅资料。于是终极解决方案终于出现,--------------------------------那就是:
用数组.

先看代码,再讨论:
服务端:
 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 }
客户端:
 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 }

从代码中看到,我们在服务端返回的是一个对象数组,到了客户端,已经被自动转换成我们魂牵梦绕的list,而且是类型安全的。泛型+foreach用起来是多么的惬意。至此,困扰已久的问题终于解决了。


那么这一切到底是为什么呢?
一切要从web service的本质说起,来吧,我们一起复习一下概念:

Web Service是为实现“基于web无缝集成”的目标而提出的全新概念,希望通过Web Service能够实现不同的系统之间能够用“软件-软件对话”的方式相互调用,打破软件应用、网站和各种设备之间格格不入的状态。

Web Service是一个应用程序,它向外界暴露一个能够通过Web进行调用的API,这就是说,能够用编程的方法通过web调用来实现某个功能的应用程序。

Web Service是一种新的Web应用程序分支,它们是自包含、自描述,模块化的应用,可以在网络中被描述、发布、查找以及通过Web调用。

Web Service概述

Web Service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web Service平台必须提供一套标准的类型系统,用于沟通不同的平台、编程语言和组建模型中的不同类型系统。

不同语言,不同平台间的数据传递就是问题的本质。
web servie中尽量不要使用本地语言的对象比如hashmap等,你不能保证调用者使用的语言也有这个对象。


这是一篇很久前写了一半的文章。后来太忙就搁置了,今天终于补完了。
posted on 2008-05-28 10:33 交口称赞 阅读(4036) 评论(3)  编辑  收藏 所属分类: Java6

FeedBack:
# re: 学习Java6(一) WebServices (7)传递集合对象终极解决方案 2008-07-23 10:40 ponpon
你好,恩先谢谢你的文章,文章中提到了传递对象数组的问题,可是文中只是说了能从服务器端把对象数组传递回给客户端,请问客户端能把对象数组传递给服务器端吗?意思是说在服务器端有这样的接口:
public String sayHello( UserInfo[] users );
望能回信: javapon@163.com  回复  更多评论
  
# re: 学习Java6(一) WebServices (7)传递集合对象终极解决方案 2009-06-15 12:03 Ricky
谢谢,学习了。  回复  更多评论
  
# re: 学习Java6(一) WebServices (7)传递集合对象终极解决方案[未登录] 2012-11-16 16:23 wu
你在这个对象中放集合和hasmap等数据,你再这么做试试  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: