WebService之Axis2快速入门(4): 传输二进制文件
在《WebService之Axis2快速入门(2): 传递复合类型的数据》中讲过,如果要传递二进制文件(如图像、音频文件等),可以使用byte[]作为数据类型进行传递,然后客户端使用RPC方式进行调用。这样做只是其中的一种方法,除此之外,在客户端还可以使用wsdl2java命令生成相应的stub类来调用WebService,wsdl2java命令的用法详见《WebService之Axis2快速入门(1): 用POJO实现0配置的WebService》。 WebService类中包含byte[]类型参数的方法在wsdl2java生成的stub类中对应的数据类型不再是byte[]类型,而是javax.activation.DataHandler。DataHandler类是专门用来映射WebService二进制类型的。 在WebService类中除了可以使用byte[]作为传输二进制的数据类型外,也可以使用javax.activation.DataHandler作为数据类型。不管是使用byte[],还是使用javax.activation.DataHandler作为WebService方法的数据类型,使用wsdl2java命令生成的stub类中相应方法的类型都是javax.activation.DataHandler。而象使用.net、delphi生成的stub类的相应方法类型都是byte[]。这是由于javax.activation.DataHandler类是Java特有的,对于其他语言和技术来说,并不认识javax.activation.DataHandler类,因此,也只有使用最原始的byte[]了。 下面是一个上传二进制文件的例子,WebService类的代码如下:
上面代码在services.xml文件的配置代码如下:
如果使用wsdl2java命令生成调用Java客户端代码,则需要创建DataHandler类的对象实例,代码如下:
wsdl2java命令会为每一个方法生成一个封装方法参数的类,类名为方法名(第一个字符大写),如uploadWithByte方法生成的类名为UploadWithByte。如果要设置file参数的值,可以使用UploadWithByte类的setFile方法,代码如下:
最后是调用uploadWithByte方法,代码如下(FileServiceStub为wsdl2java生成的stub类名): 如果使用C#调用FileService,则file参数类型均为byte[],代码如下:
其中picUpdateImage为c#中加载图像文件的picturebox控件。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- wsdl和wadl区别
- angular – 何时使用FormGroup与FormArray?
- 如何使用AngularJS UI Bootstrap工具提示显示表单输入错误?
- 如何验证Angular2?
- 【解决方法3】-bash: killall: command not found
- .NET实现之(WebService数据提供程序)
- unix terminal/console/curses 工具介绍之一
- AngularJS:当调用$ scope时,防止错误$ digest已经在进行$
- angular – 如何从mat-table材料设计中删除mat-row
- webservice文件上传下载(byte[] 实现方式)