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";
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].addChild(Node.ELEMENT, usernametoken);
username.addChild(Node.TEXT,"user1");
usernametoken.addChild(Node.ELEMENT, username);
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>
<policyNo>[string]</policyNo>
</GetPolicyDetail>
</Body>
</Envelope>
Please help.