2013-01-07 79 views
1

我想使用kso​​ap2庫在android中調用wsdl文件。我必須爲肥皂信封中的標題提供安全性。我在下面給出了以下類型的肥皂請求。在android中使用kso​​ap2提供頭文件的安全性

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

但我不知道如何提供信封頭()中的安全性。所以,請幫助代碼。

在此先感謝...

回答

2

終於我得到了我的問題的答案。

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

    } 

} 
+0

感謝分享!!! – Mateus

0

這是爲我工作......試試這個。

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]; 
    } 
相關問題