axis2实现WebService之复合类型数据的传递.docx

上传人:b****5 文档编号:2928941 上传时间:2022-11-16 格式:DOCX 页数:5 大小:19.40KB
下载 相关 举报
axis2实现WebService之复合类型数据的传递.docx_第1页
第1页 / 共5页
axis2实现WebService之复合类型数据的传递.docx_第2页
第2页 / 共5页
axis2实现WebService之复合类型数据的传递.docx_第3页
第3页 / 共5页
axis2实现WebService之复合类型数据的传递.docx_第4页
第4页 / 共5页
axis2实现WebService之复合类型数据的传递.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

axis2实现WebService之复合类型数据的传递.docx

《axis2实现WebService之复合类型数据的传递.docx》由会员分享,可在线阅读,更多相关《axis2实现WebService之复合类型数据的传递.docx(5页珍藏版)》请在冰豆网上搜索。

axis2实现WebService之复合类型数据的传递.docx

axis2实现WebService之复合类型数据的传递

axis2实现WebService之复合类型数据的传递

接着昨天的程序,今天又进了一步,学习了webservice的复合类型数据的传递,尤其是教程上没有的部分,我自己尝试着写,虽说耗费了一个下午的时间,但是还是非常值的,废话少说,看招!

在实际的应用中,不仅需要使用WebService来传递简单类型的数据,有时也需要传递更复杂的数据,这些数据可以被称为复合类型的数据。

数组与类(接口)是比较常用的复合类型。

在Axis2中可以直接使用将WebService方法的参数或返回值类型声明成数组或类(接口)。

但要注意,在定义数组类型时只能使用一维数组,如果想传递多维数组,可以使用分隔符进行分隔,如下面的代码所示:

String[]strArray=newString[]{"自行车,飞机,火箭","中国,美国,德国",

"超人,蜘蛛侠,钢铁侠"};

上面的代码可以看作是一个3*3的二维数组。

在传递类的对象实例时,除了直接将数组类型声明成相应的类或接口,也可以将对象实例进行序列化,也就是说,将一个对象实例转换成字节数组进行传递,然后接收方再进行反序列化,还原这个对象实例。

下面的示例代码演示了如何传递数组与类(接口)类型的数据,并演示如何使用字节数组上传图像。

本示例的客户端代码使用Java编写。

要完成这个例子需要如下几步:

一、实现服务端代码

[java]viewplaincopy<spanstyle="font-size:

14px;">importjava.io.FileOutputStream;importdata.DataForm;publicclassComplexTypeService{//上传图像,imageByte参数表示上传图像文件的字节,//length参数表示图像文件的字节长度(该参数值可能小于imageByte的数组长度)publicbooleanuploadImageWithByte(byte[]imageByte,intlength){FileOutputStreamfos=null;try{//将上传的图像保存在D盘的test1.jpg文件中fos=newFileOutputStream("d:

\\test1.jpg");//开始写入图像文件的字节fos.write(imageByte,0,length);fos.close();}catch(Exceptione){returnfalse;}finally{if(fos!

=null){try{fos.close();}catch(Exceptione){}}}returntrue;}//返回一维字符串数组publicString[]getArray(){String[]strArray=newString[]{"自行车","飞机","火箭"};returnstrArray;}//返回二维字符串数组publicString[]getMDArray(){String[]strArray=newString[]{"自行车,飞机,火箭","中国,美国,德国","超人,蜘蛛侠,钢铁侠"};returnstrArray;}//返回DataForm类的对象实例publicDataFormgetDataForm(){returnnewDataForm();}//将DataForm类的对象实例序列化,并返回序列化后的字节数组publicbyte[]getDataFormBytes()throwsException{java.io.ByteArrayOutputStreambaos=newjava.io.ByteArrayOutputStream();java.io.ObjectOutputStreamoos=newjava.io.ObjectOutputStream(baos);oos.writeObject(newDataForm());returnbaos.toByteArray();}}</span>

二、实现DataForm类

[java]viewplaincopy<spanstyle="font-size:

14px;">packagedata;publicclassDataFormimplementsjava.io.Serializable{privateStringname="bill";privateintage=20;setter…………getter方法}</span>

三、发布WebService

由于本示例的WebService类使用了一个Java类(DataForm类),因此,在发布WebService之前,需要先将DataForm.class文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\classes\data目录中,然后将ComplexTypeService.class文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\pojo目录中,最后启动Tomcat(如果Tomcat已经启动,由于增加了一个DataForm类,因此,需要重新启动Tomcat)。

发布之后的结果如下图所示

[java]viewplaincopy<spanstyle="font-size:

14px;"></span>[java]viewplaincopy<palign="left"><spanstyle="color:

black;"></span><spanstyle="font-size:

14px;"></span></p><palign="left"><spanstyle="font-size:

14px;"></span></p><palign="left"><spanstyle="font-size:

14px;"><imgalt=""src="

四、使用Java编写调用WebService的客户端代码在客户端仍然使用了RPC的调用方式,代码如下:

[java]viewplaincopy<spanstyle="font-size:

14px;">packageclient;importjavax.xml.namespace.QName;importorg.apache.axis2.addressing.EndpointReference;importorg.apache.axis2.client.Options;importorg.apache.axis2.rpc.client.RPCServiceClient;publicclassComplexTypeRPCClient{publicstaticvoidmain(String[]args)throwsException{RPCServiceClientserviceClient=newRPCServiceClient();Optionsoptions=serviceClient.getOptions();EndpointReferencetargetEPR=newEndpointReference("http:

//localhost:

8080/axis2/services/ComplexTypeService");options.setTo(targetEPR);//下面的代码调用uploadImageWithByte方法上传图像文件//打开图像文件,确定图像文件的大小java.io.Filefile=newjava.io.File("f:

\\images.jpg");java.io.FileInputStreamfis=newjava.io.FileInputStream("f:

\\images.jpg");//创建保存要上传的图像文件内容的字节数组byte[]buffer=newbyte[(int)file.length()];//将图像文件的内容读取buffer数组中intn=fis.read(buffer);System.out.println("文件长度:

"+file.length());Object[]opAddEntryArgs=newObject[]{buffer,n};Class[]classes=newClass[]{Boolean.class};QNameopAddEntry=newQName("http:

//ws.apache.org/axis2","uploadImageWithByte");fis.close();//开始上传图像文件,并输出uploadImageWithByte方法的返回传System.out.println(serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs,classes)[0]);//下面的代码调用了getArray方法,并返回一维String数组opAddEntry=newQName("http:

//ws.apache.org/axis2","getArray");String[]strArray=(String[])serviceClient.invokeBlocking(opAddEntry,newObject[]{},newClass[]{String[].class})[0];for(Strings:

strArray)System.out.print(s+"");System.out.println();//下面的代码调用了getMDArray方法,并返回一维String数组opAddEntry=newQName("http:

//ws.apache.org/axis2","getMDArray");strArray=(String[])serviceClient.invokeBlocking(opAddEntry,newObject[]{},newClass[]{String[].class})[0];for(Strings:

strArray){String[]array=s.split(",");for(Stringss:

array)System.out.print("<"+ss+">");System.out.println();}System.out.println();//下面的代码调用了getDataForm方法,并返回DataForm对象实例opAddEntry=newQName("http:

//ws.apache.org/axis2","getDat

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1