SOAP及SoapObject的解析
来源:互联网 发布:python 函数定义和调用 编辑:程序博客网 时间:2024/05/22 00:06
1 SOAP协议整合Android+Webservice
通过http协议,采用HttpClient向服务器端action请求数据。当然调用服务器端方法获取数据并不止这一种。WebService也可以为我们提供所需数据,那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起。我们在Android开发pc端需要一些库,比如本次项目中用到的:ksoap2-android-assembly-2.4-jar-with-dependencies.jar库。
2 基于SOAP协议访问WebService方法
第一:实例化SoapObject 对象,指定webService的命名空间(从相关WSDL文档中可以查看命名空间),以及调用方法名称。如:
SoapObject request=new SoapObject(“http://tempuri.org/”,”EVoucherInquriyHistory” );
第二步:假设方法有参数的话,设置调用方法参数
request.addProperty("参数名称","参数值");
第三步:设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致):
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut=request;
第四步:注册Envelope
(new MarshalBase64()).register(envelope);
第五步:构建传输对象,并指明Web文档URL:
String serviceURL = Constants.EVOUCHER_URL;
AndroidHttpTransport ht = new AndroidHttpTransport(serviceURL);
ht.debug = true;
第六步:调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象)
ht.call(serviceNameSpace+methodName, envelope);
如: ht.call((“http://tempuri.org/EVoucherInquriyHistory”, envelope);
第七步:获取返回结果
SoapObject result = (SoapObject) envelope.bodyIn;
3 SoapObject 解析
SoapObject soapChild=(SoapObject)result.getProperty(int);
For(int i=0; i<soapChild.getPropertyCount();i++){
SoapObject soapChilds=(SoapObject)result.getProperty(i);
String data=soapChilds.getProperty(“Key_Name”).toString();
}
SoapObject类是一个主要用于调用WCF服务的类,其对象可以作为请求,发送到WCF服务器;也可以用于存储响应信息。
该对象本身是一个存储了一套HTML语句的文本。而SoapObject本身提供了对这套HTML语句的解析。
我们对SoapObject的解析,其实可以理解为对HTML语句的解析。
本文以String类型为获取目标(即从WCF服务器提供方法返回的是String类型的数据)
首先我们把返回的String类型分成三种情况:单一个String, 一个String的数组,一个String的二维数组
①对于单一个String,我们在编写调用WCF服务的方法的时候,envelope.bodyIn就不能强制转换成SoapObject,否则会在运行时提示类型转换错误。此时envelope.bodyIn可以直接作为一个Object对象返回,也可以调用其toString()方法,即可获得想要的数据。
②对于一个String的一维数组,我们要把envelope.bodyIn强制转换成SoapObject,获取一个SoapObject类型的对象soap。
此时,只要调用SoapObject的getProperty()方法即可获得想要的数据,参数对应一维数组下标。
例如:要从返回一维数组获取第一个元素,只要调用soap.setProperty(0)即可。
③对于一个String的二维数组。
此时。通过调试发现,getProgerty()方法返回的是另一个SoapObject对象,因此我们可以把envelope.bodyIn的SoapObject对象想象成一个二维数组,其中getProperty()方法是返回一维数组的某一行,参数是对应行下标,再通过调用这一个SoapObject的getProperty()方法,即可获取某一元素。
例如:要获取String[0][1]元素,只要从envelope.bodyIn的SoapObject调用两次getProperty()方法:soap.getProperty(0).getProperty(1)
可见,只要把SoapObject抽象成一个数组,就不难去理解和解析其中的数据。
- SOAP及SoapObject的解析
- 解析SoapObject
- 解析SoapObject对象的一点心得发布:
- 从web service得到的SoapObject解析
- Android WebService 网络编程及解析 SoapObject 数据
- SoapObject解析,将SoapObject转成json字符串
- 解析Soapobject传递class
- SoapObject
- soap消息的解析
- Android 请求WebService返回SoapObject数据解析
- Android 关于SoapObject.getProperty的作用
- DOM4J对SOAP的返回信息解析
- Could not find class 'org.ksoap2.serialization.SoapObject', referenced from method cn.edu.bzu.soap.S
- Could not find class 'org.ksoap2.serialization.SoapObject', referenced from method cn.edu.bzu.soap.S
- PHP的SOAP原理及实现
- WebService:SOAP及协议的监控
- WebService传输SoapObject数据出现 org.ksoap2.serialization.SoapObject cannot be cast to java.util.Vector的问题
- cxf解析soap信息,获取SOAP消息客户端传递的鉴权信息
- jsp中静态包含和动态包含的区别与联系
- springBoot(三)springboot的jar、war部署
- spacemacs 自定义配置 笔记
- 一篇文章了解mvc框架工作流程
- 自动化测试用例操作
- SOAP及SoapObject的解析
- Oracle scott 用户解锁
- dfgh
- 文件缓存
- string数组按照字母排序
- svn 使用详解
- 文章标题
- Unity Steam_VR VRTK开发插件自带案例详解(一)
- Java可视操作界面例子