我想使用ksoap2在
android中创建带有安全头的soap信封.我的android代码是……
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请求.
<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); 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()); } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。