我试图使用一个WSDL文件调用SOAP Web服务.
我在其中添加了所有必需的参数.
但我收到的错误如下:
SoapFault - faultcode: 'ns1:unexpected-error' faultstring: 'Fault occurred while processing.' faultactor: 'null' detail: null in android
这是我的代码示例:
class RegisterMember extends AsyncTask<Void,Void,Void> {
String SOAP_ACTION = "";
String METHOD_NAME = "registerMember";
String NAMESPACE = "http://XXXXX.XX";
String URL="http://XXXX.XX?WSDL";
SoapPrimitive result1;
String str;
@Override
protected void onPreExecute() {
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Checking For Activation");
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
try {
StringBuffer sb;
SoapObject request=new SoapObject(NAMESPACE,METHOD_NAME);
request.addProperty("name","XXXX");
request.addProperty("email","XXXX@gmail.com");
request.addProperty("username","XXXXX");
request.addProperty("password","XXXX");
request.addProperty("mobile","XXXXXXX");
request.addProperty("pin","XXXX");
request.addProperty("dob","XX/XX/XXXX");
request.addProperty("gender","male");
request.addProperty("address","XXXXX");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setoutputSoapObject(request);
envelope.bodyOut = request;
Log.d("In try","In Try");
HttpTransportSE ht = new HttpTransportSE(URL);
ht.call(NAMESPACE+METHOD_NAME,envelope);
Log.d("In try","In Try1");
result1 = (SoapPrimitive)envelope.getResponse();
//SoapObject resultObj = (SoapObject)envelope.getResponse();
/*int numProp = resultObj.getPropertyCount();
sb = new StringBuffer();
for(int jj=0; jj<numProp; jj++) {
sb.append((String) resultObj.getProperty(jj) + "\n");
Log.d("For Loop",String.valueOf(sb.append((String) resultObj.getProperty(jj))));
}*/
Log.d("Envelope",String.valueOf(result1));
// str = envelope.getResponse();
// status= Boolean.valueOf(result1.toString());
// str = result1.toString();
Log.w("String Response of CheckActivation Status - - - - - - - - - -",str);
Log.w("CheckActivation Status - - - - - - - ->>>>>>>>>",String.valueOf(result1));
} catch (Exception e) {
Log.d("No Data Found",e +"");
}
try {
Thread.sleep(1000);
} catch(Exception ex) {
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// Todo Auto-generated method stub
super.onPostExecute(result);
Log.d("Response = = = = =",String.valueOf(result));
mProgressDialog.dismiss();
}
}
我怀疑SOAPACTION可能会导致问题.如果我们将SOAPACtion留空并且我们调用Web服务,那可能吗?
我使用相同的代码用于其他Web服务,使用.svc url,并且工作正常,所以我不认为代码应该有任何问题.
SOAP版本:1.1
ksoap库版本:ksoap2-android-assembly-2.6.0-jar-with-dependencies.jar
任何帮助表示赞赏.
谢谢
解决方法
尝试替换result1 =(SoapPrimitive)envelope.getResponse(); by
result1 = (SoapPrimitive)envelope.bodyIn();
并设置SOAP_ACTION!
这也是您向请求添加属性的方法:
PropertyInfo pi = new PropertyInfo();
pi.name = NAME;
pi.type = String.class;
request.addProperty(pi,VALUE);