当前位置:首页 > axis2实现WebService之复合类型数据的传递
25.PNG\
四、使用Java编写调用WebService的客户端代码 在客户端仍然使用了RPC的调用方式,代码如下: [java] view plaincopy<span
style=\ import javax.xml.namespace.QName; import
org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import
org.apache.axis2.rpc.client.RPCServiceClient; public class ComplexTypeRPCClient { public static void main(String[] args) throws Exception
{ RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new
EndpointReference( \/axis2/services/ComplexTypeService\ options.setTo(targetEPR); // 下面的代码调用uploadImageWithByte方法上传图像文件 // 打开图像文件,确定图像文件的大小 java.io.File file = new java.io.File(\ java.io.FileInputStream fis = new
java.io.FileInputStream( \ // 创建保存要上传的图像文件内容的字节数组 byte[] buffer = new byte[(int) file.length()]; // 将图像文件的内容读取buffer数组中 int n =
fis.read(buffer); System.out.println(\文件长度:\file.length()); Object[] opAddEntryArgs = new Object[] { buffer, n }; Class[] classes = new Class[] { Boolean.class }; QName opAddEntry = new QName(\ \ fis.close(); // 开始上传图像文件,并输出uploadImageWithByte方法的返回传
System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]); // 下面的代码调用了getArray方法,并返回一维String数组 opAddEntry = new QName(\\ String[] strArray = (String[])
serviceClient.invokeBlocking(opAddEntry, new Object[] {}, new Class[] { String[].class })[0]; for (String s : strArray) System.out.print(s + \ \ System.out.println(); // 下面的代码调用了getMDArray方法,并返回一维String数组
opAddEntry = new QName(\\ strArray = (String[])
serviceClient.invokeBlocking(opAddEntry, new Object[] {}, new Class[] { String[].class })[0]; for (String s : strArray) { String[] array =
s.split(\ for (String ss : array) System.out.print(\ System.out.println(); }
System.out.println(); // 下面的代码调用了getDataForm方法,并返回DataForm对象实例 opAddEntry = new QName(\\ data.DataForm df = (data.DataForm)
serviceClient.invokeBlocking( opAddEntry, new Object[] {}, new Class[] { data.DataForm.class })[0];
System.out.println(df.getAge()); // 下面的代码调用了getDataFormBytes方法,并返回字节数组,最后将返回的字节数组反序列化后,转换成DataForm对象实例 opAddEntry = new QName(\\ buffer = (byte[])
serviceClient.invokeBlocking(opAddEntry,
new Object[] {}, new Class[] { byte[].class })[0]; java.io.ObjectInputStream ois = new
java.io.ObjectInputStream( new java.io.ByteArrayInputStream(buffer)); df = (data.DataForm) ois.readObject();
System.out.println(df.getName()); } } </span> 运行上面的程序,将输出如下的内容:
文件长度:3617true自行车 飞机 火箭 <自行车> <飞机> <火箭><中国> <美国> <德国><超人> <蜘蛛侠> <钢铁侠>20
如果读者要上传大文件,应尽量使用FTP的方式来传递,而只通过WebService方法来传递文件名等信息。这样有助于提高传输效率。
以上的就是教程上的,照猫画虎,没什么技术含量,几分钟搞定,唯一需要的就是对java的io包,及java的输入输出要熟悉,不然就比较麻烦了。虽说自己懂了,但是看着客户端代码,我不禁问自己,调用webservice难道就这么复杂吗,有着现成的wsdl2java.bat我们为什么不用呢,难道教程上没有的我们就不学了吗?教程上的就一定是最好的吗?带着这些问题我开始了探索之旅,废话少说,看招!
共分享92篇相关文档