【问题标题】:SoapFault - faultcode: 'ns1:unexpected-error' android SOAP callSoapFault - 故障代码:'ns1:unexpected-error' android SOAP 调用
【发布时间】:2014-08-01 08:59:46
【问题描述】:

我正在尝试使用一个 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 服务,这可能吗?

我已经为其他网络服务使用了相同的代码,带有 .svc url,并且工作正常,所以我认为代码应该没有任何问题。

SOAP 版本:1.1 ksoap 库版本:ksoap2-android-assembly-2.6.0-jar-with-dependencies.jar

感谢任何帮助。

谢谢

【问题讨论】:

  • 错误提示你有错误,因为你正在处理空数据。

标签: android soap soapfault


【解决方案1】:

尝试替换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);

【讨论】:

  • 我根据您的建议更改了代码,现在得到了这个 eroor,我还将 SOAP_ACTION 设置为 NAMESPACE + METHOD_NAME java.lang.ClassCastException:org.ksoap2.SoapFault 不能转换为 org.ksoap2。 serialization.SoapObject 所以请指教,以便我可以更进一步
  • 如果你有你的.wsdl文件,把它放到SoapUI软件中,你就可以模拟对webservice的请求,也可以得到SOAP_ACTION等信息...
  • @bumblebeez 我已经尝试根据您的编辑更改您的代码,但我仍然收到相同的错误错误在处理时发生。请指教
【解决方案2】:

您需要检查 SOAP wsdl 是否具有哪种样式、文档或 RPC。

两者都有不同的 WSDL 格式,如果您尝试调用具有文档类型的 WSDL,可能无法为其他格式提供相同代码的响应。

所以请交叉检查并确认。

问候

【讨论】:

  • 我已经检查了这个并尝试调用相同类型的 Web 服务但文档或 RPC 但我仍然没有找到任何解决方案请提供更多建议来解决这个问题
  • 我现在遇到了诸如“java.lang.RuntimeException: Cannot serialize:”之类的soapfault错误,如果有任何解决方案请告知
猜你喜欢
  • 2013-10-03
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多