Search code examples
androidasp.netweb-servicesksoap2android-ksoap2

getting parameter error in ksoap 2 android


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");


Solution

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