Создайте конверт для мыла с заголовком безопасности в android, используя ksoap2

Я хочу создать мыльный конверт с заголовком безопасности в android, используя ksoap2. Мой код андроида …

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()); } } } 

И выше код создает ниже запроса на мыло без заголовка безопасности.

 <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> 

Но мне нужно создать ниже запрос soap с заголовком безопасности

 <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> 

Скажите, пожалуйста, какие изменения внесены в этот код

Я нашел ответ на свой вопрос. Я отвечу на полезные другие.

 public class SOAP_WebService extends Activity { private final String NAMESPACE = "http://ws.simple/"; private final String URL = "http://10.0.2.2/SimpleWebservice/simple"; private final String SOAP_ACTION = "http://ws.simple/getString"; private final String METHOD_NAME = "getString"; 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 weightProp =new PropertyInfo(); weightProp.name = "arg0"; weightProp.setValue("rajan"); request.addProperty(weightProp); SoapSerializationEnvelope envelope = 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"); header[0].setAttribute(null, "mustUnderstand","1"); Element usernametoken = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "UsernameToken"); usernametoken.setAttribute(null, "Id", "UsernameToken-1"); header[0].addChild(Node.ELEMENT,usernametoken); Element username = new Element().createElement(null, "n0:Username"); username.addChild(Node.IGNORABLE_WHITESPACE,"CBROWN"); usernametoken.addChild(Node.ELEMENT,username); Element pass = new Element().createElement(null,"n0:Password"); pass.setAttribute(null, "Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"); pass.addChild(Node.TEXT, "welcome"); usernametoken.addChild(Node.ELEMENT, pass); // add header to envelope envelope.headerOut = header; Log.i("header", "" + envelope.headerOut.toString()); envelope.dotNet = false; envelope.bodyOut = request; 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()); } catch (SoapFault e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); Log.d("Exception Generated", ""+e.getMessage()); } } } 

Это работает для меня, чтобы предоставить заголовок запроса безопасности в библиотеке kSOAP на Android

 public static Element buildAuthHeader() { Element headers[] = new Element[1]; headers[0]= new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security"); headers[0].setAttribute(null, "mustUnderstand", "1"); Element security=headers[0]; //user token Element usernametoken = new Element().createElement(security.getNamespace(), "UsernameToken"); usernametoken.setAttribute("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Id", "UsernameToken-14CBAE357AC169AFA614664925178422"); //username Element username = new Element().createElement(security.getNamespace(), "Username"); username.addChild(Node.TEXT, HttpConstant.REQ_HEADER_USERNAME); usernametoken.addChild(Node.ELEMENT,username); // password Element password = new Element().createElement(security.getNamespace(), "Password"); password.setAttribute(null, "Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"); password.addChild(Node.TEXT, HttpConstant.REQ_HEADER_PASSWORD); usernametoken.addChild(Node.ELEMENT,password); headers[0].addChild(Node.ELEMENT, usernametoken); return headers[0]; } SoapSerializationEnvelope sSerialaEnvelop = new SoapSerializationEnvelope(SoapEnvelope.VER11); sSerialaEnvelop.dotNet = true; sSerialaEnvelop.headerOut = new Element[1]; sSerialaEnvelop.headerOut[0] = SoapBasicAuth.buildAuthHeader(); //// add security request header sSerialaEnvelop.bodyOut = sObject; sSerialaEnvelop.setOutputSoapObject(sObject);