Длина содержимого мыла - PullRequest
       1

Длина содержимого мыла

3 голосов
/ 28 февраля 2012

Ниже приведен пример запроса SOAP 1.1 к серверу SP, но он не имеет значения.

POST /_vti_bin/lists.asmx HTTP/1.1
Host: 192.168.0.25
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://schemas.microsoft.com/sharepoint/soap/GetList"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetList xmlns="http://schemas.microsoft.com/sharepoint/soap/">
      <listName>string</listName>
    </GetList>
  </soap:Body>
</soap:Envelope>

Поле Длина содержимого: длина необходимо заменитьс фактическими значениями.Какова его ценность?Где я могу это увидеть?Или как вычислить это значение перед запросом?

UPD1. Я использую ksoap lib

 headerPropertyObj = new HeaderProperty("Content-Length", "383"); // should be calc before
 headerList.add(headerPropertyObj);

    transport.setUrl(URL);
    request = new SoapObject(NAMESPACE, METHOD_NAME);

   request.addProperty("listName", "Tasks");


    envelope.setOutputSoapObject(request);

    transport.call(SOAP_ACTION, envelope, headerList);

Ответы [ 3 ]

3 голосов
/ 01 марта 2012

Я решил эту проблему. Я написал себе класс

public class MyHttpTransportSE extends Transport

где я перезагрузил метод вызова, как показано ниже

     public List call(String soapAction, SoapSerializationEnvelope envelope, List headers)
     throws IOException, XmlPullParserException {

             if (soapAction == null)
                     soapAction = "\"\"";

             byte[] requestData = createRequestData(envelope);

             requestDump = debug ? new String(requestData) : null;
             responseDump = null;

             connection = getServiceConnection();

             connection.setRequestProperty("User-Agent", "kSOAP/2.0");
//           connection.setRequestProperty("SOAPAction", soapAction);
//           connection.setRequestProperty("Content-Type", "text/xml");
             connection.setRequestProperty("Content-Type", "application/soap+xml");
             connection.setRequestProperty("Connection", "close");
             connection.setRequestProperty("Content-Length", "" + requestData.length);

Это помогло мне, надеюсь, это поможет кому-то.

1 голос
/ 28 февраля 2012

Значение Content-Length - это длина (в байтах) тела, которая начинается с первого < и заканчивается последним символом тела, здесь > или, возможно, символ новой строки.

0 голосов
/ 28 февраля 2012

Правильного создания конверта должно быть достаточно, без самостоятельной установки заголовков.

http://www.helloandroid.com/tutorials/using-ksoap2-android-and-parsing-output-data

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request); 
httpTransport.debug = true; //try debugging

Если ваша проблема связана с аутентификацией на sharepoint, вам следует добавить конвертзаголовки правильно, поэтому длина вычисляется самой библиотекой. Ошибка аутентификации при подписке на веб-службу sharepoint с использованием ksoap2-android

это может помочь: http://davidsit.wordpress.com/2010/03/03/creating-sharepoint-list-items-with-php/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...