问:Axis2中到底能否传递复杂以及自定义对象?
答:肯定可以
那如何传递呢?在开发过程中,基本类型已经不能满足要求。所以才有有相应的List,Map,以及User对象,Dog对象等等。
比如传递User对象,我们想象一下,到底我们该怎么样,把这个对象传递过去呢?我们再根据前面讲的Webservice传递协议,该如何办呢?实际上发给服务器中是怎么样的格式呢?
在做Webservice时,肯定很好奇,到底这个东东是如何传递过去的?就宛如,我们学计算机时,计算机处理的信息全部都是二进制,当我们问那图片,视频,怎么运作的在计算机?老师统统告是二进制。虽然我们知道二进制是0011这种形式,但是不是仍然有种想钻到计算机中,探个究竟,想真实的体会,或亲眼见识一下?
所以呢,把抽象的东西具体化,在真实的环境中再现,这样才能深入理解其中的原理。
那我们前面也说过,我们传入一个参数为int的方法,其实就是一段soap消息。那一个我们自定义对象,是如何传递呢?User对象在生成的wsdl中,其实是这样的一段代码:
<xs:complexType name="User">
<xs:sequence>
<xs:element minOccurs="0" name="age" typke="xs:int" />
<xs:element minOccurs="0" name="id" type="xs:long" />
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
再复杂的对象,实际上也是有基本类型组成。那我们看一下再调用时,传递的soap消息是如何的?
那接下来进入我们的正题,对于复杂类型参数传递。
我们实际上使用axiom方式调用服务。这种方式,同时也是Axis2的不同于Axis的一个新特性。
首先我们拿一个例子做测试,深入剖析返回内部的传递。
第一:测试返回值为自定义对象User对象。
服务器端,还是按照上传的文档开发。方法如下:
public User getUser()
{
User u= new User();
u.setId(100);
u.setName( "123ee");
return u;
}