Конверт Android KSOAP2 - PullRequest
       6

Конверт Android KSOAP2

0 голосов
/ 04 января 2012

Я пытаюсь использовать веб-сервис .net с помощью ksoap2.

это конверт успешно обработанного запроса:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
     <s:Header>
      <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <u:Timestamp u:Id="_0">
                <u:Created>2011-12-28T18:36:08.662Z</u:Created>
                <u:Expires>2011-12-28T18:41:08.662Z</u:Expires>
            </u:Timestamp>
            <o:UsernameToken u:Id="the-uuid">
                <o:Username>username</o:Username>
                <o:Password o:Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</o:Password>
            </o:UsernameToken>
        </o:Security>
    </s:Header>
    <s:Body>
        <WebServiceMethod xmlns="http://webservicenamespace"/>
    </s:Body>
</s:Envelope>

и это мой конверт, сгенерированный ksoap2

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
    <v:Header>
        <n0:Security v:mustUnderstand="1" xmlns:n0="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <d:Timestamp d:Id="_0">
                <d:Created>2012-01-04T00:39:10.000Z</d:Created>
                <d:Expires>2012-01-04T00:44:10.000Z</d:Expires>
            </d:Timestamp>
            <n0:UsernameToken d:Id="the-uuid">
                <n0:Username>username</n0:Username>
                <n0:Password>password</n0:Password>
            </n0:UsernameToken>
        </n0:Security>
    </v:Header>
    <v:Body>
        <WebServiceMethod xmlns="webservicenamespace" />
    </v:Body>
</v:Envelope>

это код, который я использую для генерации вышеуказанного запроса:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setAddAdornments(false);
soapEnvelope.implicitTypes = true;
soapEnvelope.setOutputSoapObject(request);

HttpTransportSE transport = new HttpTransportSE(URL);
transport.debug = true;

soapEnvelope.xsd = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
String oNS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
             Element[] header = new Element[1]; 
header[0] = new Element().createElement(oNS, "Security");
header[0].setAttribute(soapEnvelope.env, "mustUnderstand", "1");

Element timestamp = new Element().createElement(soapEnvelope.xsd, "Timestamp");
timestamp.setAttribute(soapEnvelope.xsd, "Id", "_0");


String now[] = getTimestamp();
Element created = new Element().createElement(soapEnvelope.xsd, "Created");
created.addChild(Node.TEXT, now[0]);
Element expires = new Element().createElement(soapEnvelope.xsd, "Expires");
expires.addChild(Node.TEXT, now[1]);

timestamp.addChild(Node.ELEMENT, created);
timestamp.addChild(Node.ELEMENT, expires);

Element userNameToken = new Element().createElement(oNS, "UsernameToken");
userNameToken.setAttribute(soapEnvelope.xsd, "Id", "the-uuid");

Element username = new Element().createElement(oNS, "Username");
username.addChild(Node.TEXT, "username");
Element password = new Element().createElement(oNS, "Password");
password.addChild(Node.TEXT, "passwor");

userNameToken.addChild(Node.ELEMENT, username);
userNameToken.addChild(Node.ELEMENT, password);

header[0].addChild(Node.ELEMENT, timestamp);
header[0].addChild(Node.ELEMENT, userNameToken);

soapEnvelope.headerOut = header;

я получаю 400 - неверный запрос от сервера ... что я делаю неправильно?

1 Ответ

0 голосов
/ 19 июня 2012

ответ 400 кажется проблемой до SOAP, то есть Http-запрос, см. Здесь коды ошибок .Проверьте код подключения (HTTPTransport).

Надеюсь, это поможет.

...