SOAP веб-сервис на Android - PullRequest
       20

SOAP веб-сервис на Android

2 голосов
/ 25 августа 2010

Я пытаюсь подключиться к веб-службе SOAP с помощью библиотеки ksoap2. Я прочитал несколько документов об этом, но застрял, потому что мой запрос не обычный.

Мне нужно указать несколько заголовков перед отправкой запроса.

когда используется мыльный клиент для тестирования веб-сервиса, мне также нужно поместить это в раздел заголовка soap enveope:

<SOAP-ENV:Header>
<mns:AuthIn xmlns:mns="http://enablon/wsdl/"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
 <UserInfo xsi:type="wsdlns:AuthHeader">
  <EnaHomeSite xsi:type="xsd:string">sss</EnaHomeSite>
  <EnaUserName xsi:type="xsd:string">sadsa</EnaUserName>
  <EnaPassword xsi:type="xsd:string">qwertf</EnaPassword>
 </UserInfo>
</mns:AuthIn>
</SOAP-ENV:Header>

Остальная часть моего кода похожа на этот подход

Эмулятору требуется немного времени для обработки, поэтому я предполагаю, что он связывается с сервером, но вызов ... call требует:

org.xmlpull.v1.XmlPullParserException: expected: END_TAG {http://schemas.xmlsoap.org/soap/envelope/}Body (position:END_TAG </{http://schemas.xmlsoap.org/soap/envelope/}SOAP-ENV:Fault>@1:505 in java.io.InputStreamReader@43ef45e8) 

Мой вопрос: как мне прикрепить вышеупомянутый заголовок к моему запросу?

Мне не удалось найти хороший документ для ksoap. может быть, некоторые учебники или примеры. Кто-нибудь может указать мне на некоторые документы. Я нашел Javadoc, но он довольно тонкий.

Я также попытался отформатировать свой собственный необработанный HTTP-запрос. (удалось сделать это на iPhone, и он работает просто отлично). Однако я не могу добавить тело запроса. Я имею в виду большой XML-файл мыла, содержащий все пространства имен заголовков и необходимые данные для вызова. Любой указатель на это направление также будет высоко ценится.

Большое спасибо, ребята.

Ура, Alex

1 Ответ

3 голосов
/ 07 октября 2010

Я столкнулся с той же проблемой, и для этого я создал заголовок следующим образом:


public static Element[] addheader()
    {
           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.addChild(Node.TEXT,"");
           usernametoken.setAttribute("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Id", "UsernameToken-4");
           header[0].addChild(Node.ELEMENT,usernametoken);
           Element username = new Element().createElement(null, "n0:Username");
           username.addChild(Node.TEXT, "username_value");
           //username.setPrefix("n0", null);
           usernametoken.addChild(Node.ELEMENT, username);
           Element pass = new Element().createElement(null, "n0:Password");
           //pass.setPrefix("n0",null);
           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, "password_value");

           usernametoken.addChild(Node.ELEMENT, pass);
           return header;
    }

и добавьте этот заголовок как soapEnvelope.headerOut = addheader();

Как этоработает для меня, если должен работать для вас.

...