Ksoap android throws http 502 error.

71 views
Skip to first unread message

Charanjeet Singh

unread,
Feb 21, 2016, 3:37:23 AM2/21/16
to ksoap2-android
Hi,
I am trying to call soap web service using ksoap and passing credentials in header.
I am getting exception:
Http request failed. Http Status 502
at line no. 129 ie transport.call(SOAP_ACTION, soapEnvelope);

Please find the code below, please help

Code:
package abcd;

import android.content.Intent;

import android.os.AsyncTask;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;


public class PolicyNumber extends AppCompatActivity {
    String TAG = "Response";
    SoapPrimitive resultString;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_policy_number);
        addClickListener();
    }

    private void addClickListener() {
        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(getApplicationContext(),PolicyDetails.class);
                EditText editText = (EditText)findViewById(R.id.editText);
                i.putExtra("PolicyNumber",editText.getText().toString());
                i.putExtra("CustomerName", "Customer");
                AsyncTaskRunner task = new AsyncTaskRunner();
                task.execute();
                startActivity(i);
                }
            }
        );
    }
    private class AsyncTaskRunner extends AsyncTask<String, String, String> {
        //private String resp;
        @Override
        protected void onPreExecute() {

            Toast.makeText(getApplicationContext(), "abakakak", Toast.LENGTH_LONG).show();

        }

        @Override
        protected String doInBackground(String... params) {
           Object obj = calculate("user1","pass1","1234");
           if(obj != null){
               return obj.toString();
           }else{
               return null;
           }
        }

        @Override
        protected void onPostExecute(String result) {

            Toast.makeText(getApplicationContext(), "Response" + result, Toast.LENGTH_LONG).show();
        }

    }

    public Object calculate(String userName, String password, String policyNo) {
        final String METHOD_NAME = "GetPolicyDetail";
        final String NAMESPACE = "http://schemas.cordys.com/DPLIEAppRpDBWSAppServerPackage/";
        
        Object response = null;

        try {
            SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
            PropertyInfo policyNumber = new PropertyInfo();
            policyNumber.setName("policyNo");
            policyNumber.setValue("1234");
            policyNumber.setType(String.class);
            Request.addProperty(policyNumber);

            SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            //create header
            Element[] header = new Element[1];
            header[0] = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","Security");


            Element usernametoken = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "UsernameToken");
            header[0].addChild(Node.ELEMENT, usernametoken);

            Element username = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Username");
            username.addChild(Node.TEXT,"user1");

            usernametoken.addChild(Node.ELEMENT, username);

            Element pass = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","Password");
            pass.addChild(Node.TEXT,"pass1");

            usernametoken.addChild(Node.ELEMENT,pass);

            soapEnvelope.headerOut = header;
            soapEnvelope.dotNet = false; 
            soapEnvelope.bodyOut = Request;
            soapEnvelope.implicitTypes = true;
            soapEnvelope.setAddAdornments(false);
            soapEnvelope.setOutputSoapObject(Request);
            System.out.println(soapEnvelope.toString());
            HttpTransportSE transport = new HttpTransportSE(URL,60000);

            transport.call(SOAP_ACTION, soapEnvelope);
            response = soapEnvelope.getResponse();

        } catch (Exception ex) {
            Log.e(TAG, "Error: " + ex.getMessage());
        }
        return response;
    }
}

Sample Request should look like this:

    <Header>
            <UsernameToken>
                <Username>[string]</Username>
                <Password>[string]</Password>
            </UsernameToken>
        </Security>
    </Header>
    <Body>
        <GetPolicyDetail xmlns="http://schemas.cordys.com/DPLIEAppRpDBWSAppServerPackage">
            <policyNo>[string]</policyNo>
        </GetPolicyDetail>
    </Body>
</Envelope>

Please help.
Reply all
Reply to author
Forward
0 new messages