-->

getting parameter error in ksoap 2 android

2019-09-08 04:15发布

问题:

I am using calling webservice using ksoap2 in android

I am getting this error

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

I am adding parameter using 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);

request shows up like this

validLogin{uname=simar; pwd=simar; }

Things i have tried

1) Commenting and uncommenting of following line

envelope.dotNet = true;

2) No server side error as without parameter the connection can be done and get the dummy result

3) Even Tried this

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

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

回答1:

I merged knowledge from Your prev post and from this one. You Have problem with call parameters (fe. lack of slash on the end of namespace "http://23.253.164.20:8096/") and with lack of namespace on parameters uname and pwd. I really recommend to use SoapUI to compare correct request with what You have in transport.requestDump.

Working code:

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());
            }