studio google example consumir code android wsdl ksoap2

google - crear sobre de jabón con el encabezado de seguridad en Android usando ksoap2



ksoap2 android gradle (2)

Quiero crear un sobre de jabón con un encabezado de seguridad en Android usando ksoap2. Mi código de Android es como ...

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

Y encima del código, crea debajo de la solicitud de jabón sin encabezado de seguridad.

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

Pero tengo que crear debajo de la solicitud de jabón con el encabezado de seguridad

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

Por favor dígame qué tipo de cambio se realiza en este código


Esto me funciona para dar el encabezado de solicitud de seguridad en la biblioteca kSOAP en 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);


He encontrado la respuesta de mi pregunta. Me ponen respuesta a otros útiles.

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