【问题标题】:Ksoap2 android - pass simple soap headerKsoap2 android - 传递简单的肥皂头
【发布时间】:2014-08-28 09:59:28
【问题描述】:

我正在使用 ksoap2 调用 WCF 服务,据我了解,该库允许您以不同的方式创建带有标头的请求,但我找不到使用最简单的标头创建请求的方法。我想要实现的是在将要发送的 xml 中有这个结构:

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

【问题讨论】:

    标签: android soap android-ksoap2


    【解决方案1】:

    这对我来说可以在 Android 的 kSOAP 库中提供安全请求标头

    SOAP 请求。标题:

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

    【讨论】:

      【解决方案2】:

      试试这个:

      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多