4 th
2008/9
虽然在MSSOAP的帮助文档中提到过数组的传输,在apache的SOAP的帮助文档中也相应的提到过,但是对于JAVA与VB这两对怪胎所组成的webService服务并没有太多相关的文档咨询,更多的是.NET平台与Apache互联.虽然依照各类的example,但终究是直接传递数据的愿望落空了.兴许是我还没有研究到此类东西吧,不过偶然的是,我们在初期探索的时候,通过使用在复杂对象数据类型中包含数组,居然可以进行传递,惟一的麻烦就是你需要进行一次复杂对象的代理.在没有找到更好的方法之前,只能先使用了,可能也会像传文件那样出现峰回路转吧.另,此处说的数组指的是一维的,二维数组在调用的时候,会提示内存空间不足.
此中说的数组,byte[]不在其中,因为其已经被视为用来传类文件了.在wsdl文件中,对其的定义为xsd:base64Binary.是可以直接进行传递的.当然你可以用它来进行此处所说的数组传递了,但是你得保证你的值的范围不会超出-128-127.由于在VB端对于8位的byte的定义为无符号整数(0-255),所以你需要在传输某些你非常确定其数据范围的值时,需要在说明文件中给出负数的转换原则:(if getByte>255) then getByte =getByte- 256.
如果我们在服务器端中的JAVA代码中,声明了一个公有类Staff(必须为公有),此类中拥有一个简单对象的数组int[] ints.同时我们拥有另外一个用来发布webservice的类Demo,(在一个类中进行自引用是不被接受的),此类拥有一个Staff的引用,并有其公有方法getStaff().)在使用Demo发布服务后,我们开始使用VB编写相应的客户端.基本上是按照复杂数据类型中模式来进行的.对应于服务器端Staff类中的数组ints我们在VB的类中声明一个public ints as variant.在VB中,我们就可以使用类映射,将此含有数组的类接收过来,同时可以直接调用实例名.ints(i)就可以得到此数组的某个序列的值了,也可以通过isArray(ints)来测试接收到的是否为数组.
至此,我们就完成了对简单数组的传递了,在上次我们说到了,对复杂数据类型的传递,同样的,将两者合起来,组成一维的对象数组也是可以进行传递的,但是比较别扭的是你不可以直接将得到的数组某个序列的值转换成相对应的类, 只能引用那么一大串来进行调用了.基本上关于webservice的相关知识已经写完了,可能还有相关的附件传输,不过我觉得已经有了文件的传输,附件的传输则显得有点复杂.对了,还有一个我空闲时间写的DLL,用来将JAVA的ResultSet对象转换为vb的RecordSet.
文件附件:
SOAPVBClient.rar 3.56 Kb
SOAPJavaService.rar 14.68 Kb
标签: SOAP webservice 复杂对象处理与传递 数组处理与传输





