I want to create a soap envelope with a security header in android using ksoap2. My android code is like ...
import org.ksoap2.SoapEnvelope; import org.ksoap2.SoapFault; import org.ksoap2.serialization.PropertyInfo; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapPrimitive; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.kxml2.kdom.Element; import org.kxml2.kdom.Node; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class SOP_WebService extends Activity { private final String NAMESPACE = "http://xmlns.oracle.com/WorklistRetrival"; private final String URL = "http://www.sample.com/orabpel/default/WorklistRetrival/1.0"; private final String SOAP_ACTION = "process"; private final String METHOD_NAME = "WorklistRetrievalREQ"; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.soap_webservice); Button btnClick = (Button) findViewById(R.id.btnClick); btnClick.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { callWebservice(); } }); } public void callWebservice() { SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); PropertyInfo pi = new PropertyInfo(); pi.setNamespace(NAMESPACE); pi.setName("WorklistType"); pi.setValue("PO_REQUISITION"); request.addProperty(pi); PropertyInfo p2 = new PropertyInfo(); p2.setNamespace(NAMESPACE); p2.setName("Status"); p2.setValue("TODO"); request.addProperty(p2); PropertyInfo p3 = new PropertyInfo(); p3.setNamespace(NAMESPACE); p3.setName("Mode"); p3.setValue(""); request.addProperty(p3); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.setOutputSoapObject(request); HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); Log.i("bodyout", "" + envelope.bodyOut.toString()); try { androidHttpTransport.debug = true; androidHttpTransport.call(SOAP_ACTION, envelope); SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); Log.i("myApp", response.toString()); Log.i("request", "" + envelope.bodyIn); Log.i("response", "" + envelope.bodyOut); Log.i("request", "" + androidHttpTransport.requestDump); Log.i("response", "" + androidHttpTransport.responseDump); } catch (SoapFault e) { Log.d("soapFault", "soapFault"); e.printStackTrace(); } catch (Exception e) { Log.d("Exception", "Exception"); e.printStackTrace(); Log.d("Exception Generated", ""+e.getMessage()); } } }
And above the code, create below the soap request without a security header.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <soap:Header> </soap:Header> <soap:Body xmlns:ns1="http://xmlns.oracle.com/bpel/aubi/mobile/Worklist"> <ns1:WorklistRetrievalREQ> <ns1:WorklistType>HR_OFFER</ns1:WorklistType> <ns1:Status>TODO</ns1:Status> <ns1:Mode/> </ns1:WorklistRetrievalREQ> </soap:Body> </soap:Envelope>
But I need to create below soap request with security header
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <soap:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" soap:mustUnderstand="1"> <wsse:UsernameToken xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsse:Username>cbrown</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">welcome</wsse:Password></wsse:UsernameToken> </wsse:Security> </soap:Header> <soap:Body xmlns:ns1="http://xmlns.oracle.com/bpel/aubi/mobile/Worklist"> <ns1:WorklistRetrievalREQ> <ns1:WorklistType>HR_OFFER</ns1:WorklistType> <ns1:Status>TODO</ns1:Status> <ns1:Mode/> </ns1:WorklistRetrievalREQ> </soap:Body> </soap:Envelope>
Please tell me what changes have been made to this code.
Kels
source share