Ksoap2 获取webservice返回值的getResponse() 出现的问题
今天写了一个判断记录重复的webservcie 返回布尔类型
// 判断序列号在数据库是否重复
public static boolean isSerialNumExist(String serialNumber)
throws IOException, XmlPullParserException {
boolean isExist = false;
String methodName = "IsSerialNumberExist"; // 方法名
HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); //SERVICE_URL为 webservice的地址
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER12);
SoapObject soap = new SoapObject(SERVICE_NS, methodName);
// 传入参数
soap.addProperty("serialNumber", serialNumber);
envelope.bodyOut = soap;
// 设置webservice的提供者为.net平台的
envelope.dotNet = true;
ht.call(SERVICE_NS + methodName, envelope);
// SoapObject in = (SoapObject) envelope.getResponse();
String response=envelope.getResponse().toString(); //值为: false
SoapObject in = (SoapObject) envelope.bodyIn;
// String bodyIn=in.toString();
// 值为:IsSerialNumberExistResponse{IsSerialNumberExistResult=false; }
if (in != null) {
isExist = Boolean.valueOf(in.getProperty(methodName + "Result")
.toString());
}
return isExist;
}
一、SoapSerializationEnvelope携带输出参数与返回值:
(1)其属性bodyIn为SoapObject类型 内容格式为 methodName+Response{ methodName+Result=值;... } (要是返回的是字符串数组:
methodName+Response{ methodName+Result=anyType{stirng=value1;string=value2;...} })
获取指定属性的值:
SoapObject in = (SoapObject) envelope.bodyIn;
in.getProperty(methodName+Result).toString();
(2)而我通过 getResponse()获取的返回值直接就是false (要是返回值是字符串数数组 其格式为: anyType{ string=value1; stirng=value2;...} )不能转换成SoapObject类型,此时貌似getResponse()就是什么soapprimitive类型了; 数组的话可以转换;
所以在使用的时候要么try catch 要么直接用bodyIn 就不会出错的样子,如下:
SoapObject result=null;
try{
result = (SoapObject) soapEnvelope.getResponse(); }
catch (ClassCastException e) {
result = (SoapObject)soapEnvelope.bodyIn;
}
二、不过还一个问题是: 这两种获取返回值的方式会有所不同,具体体现为 result.getProperty(String name) 传入的参数差异
返回单个值:
getResponse():
object response=envelope.getResponse(); bodyIn:
object in=in.getProperty(methodName + "Result");
返回字符串数组:
getResponse:
if (soapIn != null)
{
int count = soapIn.getPropertyCount(); // 属性个数
for (int i = ; i < count; i++)
{
soapIn.getProperty(i).toString(); // do as you like
}
} bodyIn:
if (soapIn != null)
{
SoapArray soapArray=soapIn.getProperty(methodName+"Result"); // 差异
int count = soapArray.getPropertyCount(); // 属性个数
for (int i = ; i < count; i++)
{
soapArray.getProperty(i).toString()
}
}
Ksoap2 获取webservice返回值的getResponse() 出现的问题的更多相关文章
- C#获取存储过程返回值和输出参数值的方法
//转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...
- Python从线程获取函数返回值
Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...
- EF中执行存储过程,获取output返回值
EF不能直接支持执行存储过程,于是使用转化成执行SQL语句的形式,却怎么也获取不到output的值,折腾的好久,终于解决了,分享下曲折的经历: public int AddVote(int title ...
- PHP获取函数返回值的引用
通过在函数前添加&可以获取函数返回值的引用,如:function &test(){return 10;}
- android两种方式获取AsyncTask返回值
获取AsyncTask返回值,在Activity中使用. 引用链接:https://www.oschina.net/code/snippet_725438_49858#72630 [1].[代码] [ ...
- asp 获取url 返回值 和 对json 返回值的处理
Function GetHttpPage(HttpUrl,endoce) If endoce = "" Then endoce = "GB2312" If Is ...
- java 反射获取方法返回值类型
//ProceedingJoinPoint pjp //获取方法返回值类型 Object[] args = pjp.getArgs(); Class<?>[] paramsCls = ne ...
- 用jquery的ajax方法获取return返回值的正确姿势
如果jquery中,想要获取ajax的return返回值,必须注意两方面,ajax的同步异步问题,在ajax方法里面还是外面进行return返回值. 下面列举了三种写法,如果想成功获取到返回值,参考第 ...
- Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页及获取JS返回值
前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但是网页的DOM元素内容却可以动态的变化.如果处理这种网页是还用requests库或者 ...
随机推荐
- 10gR2-11gR1,11gR2如何干净的清除并重建OCR和表决磁盘
下面分别讨论10gR2-11gR1和11gR2干净的清除并重建OCR和表决磁盘的方法. 一.10gR2-11gR1干净的清除并重建OCR和表决磁盘的方法 参考METALINK文章:ID 399482. ...
- 删除sqlserver2008日记文件
use master go alter database dbname set recovery simple with no_wait go alter database dbname set re ...
- Laxcus大数据管理系统2.0(11)- 第九章 容错
第九章 容错 在当前,由于集群庞大的组织体系和复杂性,以及用户普遍要求低成本硬件,使得集群在运行过程中发生的错误概率,远远高于单一且性能稳定的小型机服务器,并且集群在运行过程中几乎是不允许停止的,这就 ...
- 怎样用CODESOFT打印连续的条码标签?
在实际工作中,经常会用CODESOFT条 码打印软件来实现打印连续的条码标签,将这些标签按递增或递减等方式连续打印.这样设置可大大提高用户的工作效率.实现在CODESOFT 2015打印连续条码标签, ...
- 【LeetCode】20. Valid Parentheses
题目:
- 如何去掉有背景图的a标签的边框
有两种情况: 1.<a href="#" style="background:url(../images/download.png);"></ ...
- 华为OJ平台——字符串分隔
题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输 ...
- malloc、calloc、realloc的区别
(1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...
- js的二元三元操作符
二元 if ( a == b) { alert(a) } // (a == b) && alert(a) if ( a != b) { alert(a) } // (a == b) | ...
- 检查字符串长度 检查字符串是否为空 用正则表达式验证出版物的ISBN号 用正则表达式验证邮证编码 验证字符串中是否含有汉字
<?php /** * 常用的正则表达式来验证信息.如:网址 邮箱 手机号等 */ class check { /** * 正则表达式验证email格式 * * @param string $s ...