2014-08-28 2 views
1

ksoap2를 사용하여 WCF 서비스를 호출했습니다. 이해할 수있는 것처럼이 라이브러리를 사용하여 여러 가지 방법으로 헤더를 사용하여 요청을 만들 수 있지만, 생성 방법을 찾을 수 없습니다. 가장 간단한 헤더로 요청.Ksoap2 android - 간단한 비누 헤더를 전달합니다.

<soap:Header> 

    <authToken>tokenhere</authToken> 

</soap:Header> 

나는 그것을 얻을 수있는 가장 가까운이 생산

Element[] header = new Element[1]; 
header[0] = new Element().createElement(null, "authToken"); 


header[0].setAttribute(null, "authToken" ,authToken); 
envelope.headerOut = header; 

입니다 :

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:d="http://www.w3.org/2001/XMLSchema" 
xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"> 
<v:Header><authToken authToken="PD94bWwgdmVyc" /></v:Header> 
<v:Body></v:Body> 
</v:Envelope> 

답변

2

Android 용 kSOAP 라이브러리에서 보안 요청 헤더를 제공하기 위해 노력하고 있습니다.

SOAP REQ. 헤더 :

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cif="http://www.mawarid.ae/linkedCardsSummary/CRM/CIF.xsd"> 
     <soapenv:Header> 
     <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:UsernameToken wsu:Id="UsernameToken-14CBAE357AC169AFA614664925178422"> 
      <wsse:Username>XXXXXXXXXXXX</wsse:Username> 
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XXXXXXXXXXXX</wsse:Password> 
       </wsse:UsernameToken> 
     </wsse:Security> 
    </soapenv:Header> 

안드로이드 코드 :

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] = buildAuthHeader(); //// add security request header 
     sSerialaEnvelop.bodyOut = sObject; 
     sSerialaEnvelop.setOutputSoapObject(sObject); 
0
내가 달성하고자하는 것은 전송 될 XML에서이 구조를 가지고있다

시험해보기 :

envelope.headerOut = new org.kxml2.kdom.Element[1]; 
org.kxml2.kdom.Element elem1 = new org.kxml2.kdom.Element().createElement("","authToken"); 
elem1.addChild(org.kxml2.kdom.Node.TEXT, authToken); 
envelope.headerOut[0]=elem1;