我在android
中使用ksoap2调用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");
答案 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());
}