在ksoap 2 android中获取参数错误

时间:2015-04-20 11:40:52

标签: android asp.net web-services ksoap2 android-ksoap2

我在android

中使用kso​​ap2调用webservice

我收到此错误

SoapFault - faultcode: 'soap:Server' faultstring: 'Server was unable to process request. ---> The parameterized query 
java.lang.ClassCastException: org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject

我使用 propertyInfo

添加参数
            PropertyInfo fromProp =new PropertyInfo();
            fromProp.setName("uname");
            fromProp.setValue("test");
            fromProp.setType(String.class);
            request.addProperty(fromProp);
            PropertyInfo toProp =new PropertyInfo();
            toProp.setName("pwd");
            toProp.setValue("test");
            toProp.setType(String.class);
            request.addProperty(toProp);

请求显示如下

  

validLogin{uname=simar; pwd=simar; }

我尝试过的事情

  

1)评论和取消注释以下行

envelope.dotNet = true;
     

2)没有服务器端错误,因为没有参数可以连接   完成并获得虚拟结果

     

3)甚至试过这个

     

request.addProperty("uname","simar");

     

request.addProperty("pwd","simar");

1 个答案:

答案 0 :(得分:0)

我合并了您的上一篇文章和本文中的知识。 你有调用参数的问题(fe。在命名空间“http://23.253.164.20:8096/”的末尾没有斜杠)和参数uname和pwd缺少命名空间。我真的建议使用SoapUI来比较正确的请求和transport.requestDump中的内容。

工作代码:

public final static String URL = "http://23.253.164.20:8096/login.asmx";
public static final String NAMESPACE = "http://23.253.164.20:8096/";
public static final String SOAP_ACTION_PREFIX = "http://23.253.164.20:8096/validLogin";
private static final String METHOD = "validLogin";
public String getFahrenheit(String celsius) {

        try {
            // SoapEnvelop.VER11 is SOAP Version 1.1 constant
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER12);
            SoapObject request = new SoapObject(NAMESPACE, METHOD);
            PropertyInfo fromProp =new PropertyInfo();
            fromProp.setName("uname");
            fromProp.setValue("test");
            fromProp.setType(String.class);
            fromProp.setNamespace(NAMESPACE);
            request.addProperty(fromProp);
            PropertyInfo toProp =new PropertyInfo();
            toProp.setName("pwd");
            toProp.setValue("test");
            toProp.setType(String.class);
            toProp.setNamespace(NAMESPACE);
            request.addProperty(toProp);
            //bodyOut is the body object to be sent out with this envelope
            envelope.bodyOut = request;
            envelope.implicitTypes=true;
            HttpTransportSE transport = new HttpTransportSE(URL);
            transport.debug=true;
            try {
//                      transport.call(NAMESPACE + SOAP_ACTION_PREFIX + METHOD, envelope);
                transport.call(SOAP_ACTION_PREFIX, envelope);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
            //bodyIn is the body object received with this envelope
            if (envelope.bodyIn != null) {
                //getProperty() Returns a specific property at a certain index.
                SoapPrimitive resultSOAP = (SoapPrimitive) ((SoapObject) envelope.bodyIn)
                        .getProperty(0);
                System.out.println(resultSOAP.toString());
            }