问题
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());
}
来源:https://stackoverflow.com/questions/29746895/getting-parameter-error-in-ksoap-2-android