Java6 WebServices传递集合对象终极解决方案

之前遇到过传递参数的类型转换问题,但是这篇文章还是不能完全解释我遇到的问题。但还是先转过来收着吧。

-------------------------------------------------------------------------------------------------

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等,你不能保证调用者使用的语言也有这个对象。


附上原文链接:http://www.blogjava.net/vip01/archive/2008/05/28/128075.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值