WebService大讲堂之Axis2(2):复合类型数据的传递 - 编程入门网
WebService大讲堂之Axis2(2):复合类型数据的传递时间:2011-08-13 BlogJava 哈佛校训在实际的应用中,不仅需要使用WebService来传递简单类型的数据,有时也需要传递更复杂的数据, 这些数据可以被称为复合类型的数据。数组与类(接口)是比较常用的复合类型。在Axis2中可以直接使 用将WebService方法的参数或返回值类型声明成数组或类(接口)。但要注意,在定义数组类型时只能使 用一维数组,如果想传递多维数组,可以使用分隔符进行分隔,如下面的代码所示: String[] strArray = new String[]{ "自行车,飞机,火箭","中国,美国,德国", "超人,蜘蛛侠,钢铁 侠" } ; 上面的代码可以看作是一个3*3的二维数组。 在传递类的对象实例时,除了直接将数组类型声明成相应的类或接口,也可以将对象实例进行序列化 ,也就是说,将一个对象实例转换成字节数组进行传递,然后接收方再进行反序列化,还原这个对象实例 。 下面的示例代码演示了如何传递数组与类(接口)类型的数据,并演示如何使用字节数组上传图像。 本示例的客户端代码使用Java和C#编写。要完成这个例子需要如下几步: 一、实现服务端代码 ComplexTypeService是一个WebService类,该类的代码如下: import java.io.FileOutputStream; import data.DataForm; public class ComplexTypeService { // 上传图像,imageByte参数表示上传图像文件的字节, // length参数表示图像文件的字节长度(该参数值可能小于imageByte的数组长度) public boolean uploadImageWithByte(byte[] imageByte, int length) { FileOutputStream fos = null; try { // 将上传的图像保存在D盘的test1.jpg文件中 fos = new FileOutputStream("d:\\test1.jpg"); // 开始写入图像文件的字节 fos.write(imageByte, 0, length); fos.close(); } catch (Exception e) { return false; } finally { if (fos != null) { try { fos.close(); } catch (Exception e) { } } } return true; } // 返回一维字符串数组 public String[] getArray() { String[] strArray = new String[]{ "自行车", "飞机", "火箭" }; return strArray; } // 返回二维字符串数组 public String[] getMDArray() { String[] strArray = new String[]{ "自行车,飞机,火箭","中国,美国,德国", "超人,蜘蛛侠,钢铁侠" } ; return strArray; } // 返回DataForm类的对象实例 public DataForm getDataForm() { return new DataForm(); } // 将DataForm类的对象实例序列化,并返回序列化后的字节数组 public byte[] getDataFormBytes() throws Exception { java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(baos); oos.writeObject(new DataForm()); return baos.toByteArray(); } } WebService大讲堂之Axis2(2):复合类型数据的传递(2)时间:2011-08-13 BlogJava 哈佛校训二、实现DataFor |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |