Asfak Saiyed
Asfak Saiyed

Reputation: 303

SoapFault - faultcode: 'ns1:unexpected-error' android SOAP call

I am trying to call SOAP web service using one WSDL file.

I have added all required parameters in it. But I am getting error as below:

SoapFault - faultcode: 'ns1:unexpected-error' faultstring: 'Fault occurred while processing.' faultactor: 'null' detail: null in android

Here is my code sample:

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", "[email protected]");
            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();
    }
}

I doubt that the SOAPACTION might be causing issue. Is that possible if we have SOAPACtion blank and we call web service?

I have used same code for other web service, with .svc url, and works fine, so I dont think code should have any problem.

SOAP version:1.1 ksoap library version: ksoap2-android-assembly-2.6.0-jar-with-dependencies.jar

Any help is appreciated.

Thanks

Upvotes: 8

Views: 1529

Answers (2)

thedarkcoder
thedarkcoder

Reputation: 395

You need to check whether SOAP wsdl has which style, document or RPC.

both have different WSDL format, and it may possible, if you try to call WSDL with document type, might not give response with same code work for other one.

So please cross check this and confirm.

Regards

Upvotes: 0

Jonsmoke
Jonsmoke

Reputation: 852

Try replacing result1 = (SoapPrimitive)envelope.getResponse();by

result1 = (SoapPrimitive)envelope.bodyIn();  

and also set a SOAP_ACTION !
Also this is how you add a property to the request :

    PropertyInfo pi = new PropertyInfo();
    pi.name = NAME;
    pi.type = String.class;
    request.addProperty(pi, VALUE);

Upvotes: 1

Related Questions