webService网络服务调用总结(2) 2018-11-23 20:16 第四步、在调用过程中,添加本地数据类型与服务端数据类型的映射,通过addMapping()方法在调用webService服务的HttpTransportSE对象调用call()方法之前。 addMapping()方法有三个参数,分别是服务端的引用url、参数名和本地对应的类型。代码如下:envelope.addMapping(soapMapping, \三个参数可通过自定义参数描述文件中xs:schema节点的targetNamespace属性值、xs:complexType节点的name属性值获取到SoapMapping和TransferParams两个值。 这样自定义类型的参数的问题也差不多能解决了。 带有自定义类型属性的自定义类型参数 但是此刻就又有问题了,你应该发现了此时自定义类型参数的所有属性都是基本数据类型,那如果此参数的某个属性也是自定义类型的,该怎么解决呢?解决方法与上述自定义类型的解决方法相似,就是新建java文件实现kvmSerializable序列化接口来描述自定义类型的属性,然后以普通属性的形式在自定义类型参数中声明。 自定义类型参数集合 到这里,自定义类型的参数问题已经解决了一半,剩下的一半是自定义类型参数集合。如果拥有自定义类型属性的自定义参数你理解了,那么这剩下的一半自定义类型参数集合就很容易了。这里你可以把集合想象成一个有且只有一个属性的参数,而此属性也为自定类型的。只是不同的是你在新建集合的java文件时,需要继承Vector,这里的E指的是集合中包含的参数类型。当然参数类型的映射仍需要添加。 最后,针对上面的资源用一个完整的案例帮助大家分析一下,所以请容我再啰嗦一遍 准备工作 http://10.0.1.223:9100/KdtService/ 服务地址 Ksoap2-android.Jar包 下载地址:http://pan.http://www.wodefanwen.com//s/1CE754 1、 新建android项目,导入jar包,添加权限 2、 修改activity_main.xml文件,添加三个按钮分别用于测试无参(基本数据类型)webServices服务调用、自定义参数webServices服务调用、自定义参数集合webServices服务调用和一个用于显示结果的显示框,代码如下: /> android:id=\android:layout_width=\android:layout_height=\android:text=\ /> android:id=\android:layout_width=\android:layout_height=\android:text=\ /> android:id=\android:layout_width=\android:layout_height=\android:text=\ /> 布局不是很复杂,在此就不再赘述了。 3、 新建负责调用服务的工具类WebServiceOp.java文件,代码如下: package com.example.webservicetest; import java.io.IOException; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; public class WebServiceOp { //命名空间 private static final String NAME_SPACE = \ //服务地址 private static final String URL = \ //操作方法的名称 private static String methodName = \ private static String soapMapping = \ private static LinkedHashMapparamMap; private static TransferParamstran; private static int flag = 1; /** * 公用方法 * @parammethodname方法名称 * @paramparamMap 参数集合 * @return * @throws IOException */ public static SoapObjectLoadResult(String methodname,MapparamMap) throws IOException{ //创建soap对象,传入所需调用的webService的命名空间和webService方法名 SoapObjectsoapObject = new SoapObject(NAME_SPACE, methodname); //创建SoapSerializationEnvelope对象,传入所需版本 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); //创建HttpTransportSE对象,该对象用于调用webService操作 HttpTransportSE trans = new HttpTransportSE(URL,20000); //判断参数集合是否为空 if(paramMap != null) { //将map中的参数放入迭代器中 Iterator>iter = paramMap.entrySet().iterator(); //遍历迭代器,为soap对象设置参数 while(iter.hasNext()){ Map.Entry me = iter.next(); soapObject.addProperty(me.getKey(),\ } //服务器端自定义类型的映射 switch(flag) { case 0: break; case 1: envelope.addMapping(soapMapping, TransferParams.class); break; case 2: envelope.addMapping(soapMapping, TransferParams.class); \\ envelope.addMapping(soapMapping, \ envelope.addMapping(soapMapping, \ArrayOfPEnt.class); break; case 3: envelope.addMapping(soapMapping, \TransferParams.class); envelope.addMapping(soapMapping, \ envelope.addMapping(soapMapping, \ArrayOfScanData.class); break; default: break; } } //创建的SoapObject对象设为SoapSerializationEnvelope的传出SOAP消息体 envelope.bodyOut = soapObject; envelope.setOutputSoapObject(soapObject); //设置兼容.net服务器端 envelope.dotNet = true; //使用调试功能 trans.debug = true; try { //调用操作对象call方法,将SoapSerializationEnvelope作为参数调用远程webService trans.call(NAME_SPACE + \System.out.println(trans.requestDump); //调用完成,访问SoapSerializationEnvelope对象的bodyIn属性,该属性返回一个SoapObject对象,该对象代表webService的返回信息 SoapObject result = (SoapObject) envelope.bodyIn; //打印Log日志信息 return result; } catch (XmlPullParserException e) { e.printStackTrace(); return null; } } //无参调用 public static SoapObjectserverTime() throws IOException { methodName = \ flag = 0; return LoadResult(methodName, null); } //自定义类型参数调用 public static SoapObject register() throws IOException { //设置需要调用的服务器接口方法的名称 methodName = \ tran = new TransferParams(); tran.setCompress(true); tran.setDBType(0); tran.setDefaultLogic(true); tran.setEnterpriseID(\ tran.setFileType(0); tran.setPDAID(\ tran.setStationID(\ //将自定义类型以参数形式放入map集合中 paramMap = new LinkedHashMap(); paramMap.put(\ flag = 1; return LoadResult(methodName, paramMap); } //含有自定义类型参数集合的调用 public static SoapObjectdownLoad() throws IOException { methodName = \ tran = new TransferParams(); tran.setCompress(true); tran.setDBType(0); tran.setDefaultLogic(true); tran.setEnterpriseID(\ tran.setFileType(0); tran.setPDAID(\ tran.setStationID(\ ParamEnt p1= new ParamEnt(); p1.setTableName(\ ParamEnt p2 = new ParamEnt(); p2.setTableName(\ ArrayOfPEntaope = new ArrayOfPEnt(); aope.add(p1); aope.add(p2); 共4页: 上一页1234下一页 webService网络服务调用总结(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决! 下载这篇word文档