关于 ksoap2调用 webservice 遇到的一些问题

拿到了 webservice 接口调用 不算完整的文档

  1. 当用 ksoap2 写好代码 ,去调用 webservice 遇到
    服务器返回 500 的错误码

解决方案可能是 ksoap2的 jar包有问题, 换一个试试(虽然原来用的这个jar是好着的,但是这次做的时候 怎么都是500.网上细细查询后,才说换个 jar包试试,换了后确实好了,可能也跟webservice服务器有关系吧,毕竟第三方)

  1. 需要传递的参数中有带 “&” 符号
    比如: name,pwd 2个参数。 但是传入的值中有 “&”

    解决方案: 刚开始看到 在webservice页面填是没有问题的。
    但是如果要访问传参的话 会需要转义就比如xml中
    “<” “>” “&” 都是需要转义的。
    最后试了其实是不用转义的,转义反到会出错

3 遇到这样的错误: java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to org.ksoap2.serialization.SoapObject

解决方案: 其实是在访问的代码中,接收结果的时候一般都是这么写的

//这个来接受返回来的值,但这种方法往往会产生
SoapObject soapObject = (SoapObject)envelope.getResponse();

原因就是,在服务器端返回值是String类型的数值的时候

这两种方法来接受值都会报出错

SoapObject result = (SoapObject) envelope.getResponse();
SoapObject result = (SoapObject)envelope.bodyIn;

所以接收结果代码要改成:

Object result = (Object) envelope.getResponse();

4 . 遇到错误
org.xmlpull.v1.XmlPullParserException: expected: START_TAG(http://www.w3.org/2001/12/soap-envelop)

解决方案: 这个就在ksoap2 中也是访问代码的部分,一般是会这么写的。
所以这个设置写不对的话会遇到这个错误

SoapSerializationEnvelope envelope = 
new SoapSerializationEnvelope(SoapEnvelope.VER11);

SoapEnvelope.VER10: 对应的是 SOAP1.0规范
SoapEnvelope.VER11: 对应的是 SOAP1.1规范
SoapEnvelope.VER12: 对应的是 SOAP1.2规范

5 . ksoap2调用webservice 成功, 但是返回结果不对。

解决方案:
这个就需要仔细核实 自己的传参问题了。 当然感觉传参一般不会又太大问题。
再就是其他的设置的问题了比如: 命名空间了
namespace soapAction 这个2个一定要区分开。

(1)原来我上个公司的webserivice项目里面的

namespace(命名空间) = http://tempuri.org/
soapAction = namespace + methodName(方法名)

(2) 但是这个webservice里面的

namespace(命名空间) = http://www.tempuri.org
这就必须在中间加点东西了
soapAction = namespace +”/”+ methodName(方法名)

这个还是要看清楚的咯

下面粘贴上工具类的方法

    public static Object GetWebServiceData(String nameSpace, String doMethod, String wsurl, List<WebParam> List){

        Object result = null;
        String soapAction = nameSpace + "/"+  doMethod;
        //String soapAction = nameSpace +  doMethod;
        String wsurl1 = wsurl + "?wsdl";
        // 2得到KSOAP2的核心对象,并将参数传递给SoapObject
        SoapObject request = new SoapObject(nameSpace, doMethod);
        if (List != null){
            for (WebParam mWebParam : List){
                request.addProperty(mWebParam.key, mWebParam.value);
            }
        }
        //类型要注意
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

        envelope.bodyOut = request;
        System.out.println("=envelope.bodyOut=="+ envelope.bodyOut);
        //服务器是.net做的
        envelope.dotNet = true; 
        HttpTransportSE se = new HttpTransportSE(wsurl1);
        se.debug = true;
        try{
            se.call(soapAction, envelope);
            if (envelope.getResponse() != null){
                result = (Object) envelope.getResponse();
            }

        } catch (Exception e){
            System.out.println("==WebServiceUtil=="+  e.toString());
            e.printStackTrace();
        }
        return result;
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值