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
交口称赞 阅读(4045)
评论(3) 编辑 收藏 所属分类:
Java6