ksoap2

2013-01-07 37 views
6

का उपयोग करके एंड्रॉइड में सुरक्षा शीर्षलेख के साथ साबुन लिफाफा बनाएं, मैं ksoap2 का उपयोग करके एंड्रॉइड में सुरक्षा शीर्षलेख के साथ साबुन लिफाफा बनाना चाहता हूं। एंड्रॉइड का मेरा कोड इस प्रकार है ...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: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> 

कृपया मुझे बताओ कि परिवर्तन किस तरह इस कोड

उत्तर

10

में बना रहे हैं मैं अपने सवाल का जवाब मिल गया है। मुझे उपयोगी दूसरों का जवाब दिया गया है।

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

धन्यवाद। आपकी मूल आवश्यकता में आईडी = उपयोगकर्ता नाम टोकन -1 नहीं है जो आपके अंतिम कोड में है। – Hong

+0

@kels: यदि आप SOAP प्रोजेक्ट के पूर्ण नमूना स्रोत कोड को साझा कर सकते हैं, तो मैं अत्यधिक सराहना करता हूं, ताकि मैं इसे बना और समझ सकूं। क्या आपने इसे कहीं होस्ट किया है? मैं अभी भी कई विकल्प की कोशिश नहीं कर रहा हूं। – Raa

0

यह Android

में kSOAP पुस्तकालय में सुरक्षा अनुरोध हेडर देने के लिए
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);