KSOAP2-Android SoapEnvelope Ошибки / Вопросы - PullRequest
1 голос
/ 02 ноября 2010

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

<?xml version="1.0" encoding="UTF-8" ?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<soapenv:Body>
<hilo:getHLPredAndMetadata xmlns:hilo="http://opendap.co-ops.nos.noaa.gov/axis/webservices/highlowtidepred/wsdl">
  <stationId xmlns="">8454000</stationId> 
  <beginDate xmlns="">20060920 00:00</beginDate> 
  <endDate xmlns="">20060922 23:59</endDate> 
  <datum xmlns="">0</datum> 
  <unit xmlns="">0</unit> 
  <timeZone xmlns="">0</timeZone> 
  </hilo:getHLPredAndMetadata>
  </soapenv:Body>
  </soapenv:Envelope>

Но после добавления свойств я получаю следующий вывод:

<?xml version="1.0" encoding="UTF-8" ?> 
<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 /> 
<v:Body>
<n0:getHLPredAndMetadata id="o0" c:root="1" xmlns:n0="http://opendap.co-ops.nos.noaa.gov/axis/webservices/highlowtidepred/wsdl">
  <stationId i:type="d:string">8722669</stationId> 
  <beginDate i:type="d:string">20101101 00:00</beginDate> 
  <endDate i:type="d:string">20101101 23:00</endDate> 
  <datum i:type="d:int">0</datum> 
  <unit i:type="d:int">0</unit> 
  <timeZone i:type="d:int">0</timeZone> 
  </n0:getHLPredAndMetadata>
  </v:Body>
  </v:Envelope>

Источник довольно прямой. После звонка я получаю сообщение об ошибке ниже:

11-02 03:01:01.151: ERROR/NoaaTideSoap(389): unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@44eff1b8) 
11-02 03:01:01.151: ERROR/NoaaTideSoap(389): org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@44eff1b8)
11-02 03:01:01.151: ERROR/NoaaTideSoap(389):     at org.kxml2.io.KXmlParser.exception(KXmlParser.java:245)
11-02 03:01:01.151: ERROR/NoaaTideSoap(389):     at org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:1365)
11-02 03:01:01.151: ERROR/NoaaTideSoap(389):     at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:126)
11-02 03:01:01.151: ERROR/NoaaTideSoap(389):     at org.ksoap2.transport.Transport.parseResponse(Transport.java:63)
11-02 03:01:01.151: ERROR/NoaaTideSoap(389):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:100)

Я не уверен, что я получаю эту ошибку из-за проблемы с KSOAP. Я не вижу ответа от службы, которой я звоню.

Я думаю, что служба ожидает префикс "hilo", как они указывают здесь:

и где мой звонок выглядит так:

Дополнительно в свойствах, которые они ожидают:

8454000

и снова атрибуты отличаются

8722669

Кто-нибудь знает, как установить эти значения с помощью KSOAP?

Ниже приведен фрагмент кода:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

  request.addProperty("stationId","8722669");
  request.addProperty("beginDate","20101101 00:00");
  request.addProperty("endDate","20101101 23:00");
  request.addProperty("datum",0);
  request.addProperty("unit",0);
  request.addProperty("timeZone",0);

  SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
  //soapEnvelope.dotNet = true;
  soapEnvelope.setOutputSoapObject(request);

  AndroidHttpTransport aht = new AndroidHttpTransport(URL);
  aht.setXmlVersionTag("<?xml version=\"1.0\" encoding= \"UTF-8\" ?>");

  aht.debug = true;

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 26 ноября 2010

Если веб-служба основана на .NET, сначала установите точку останова или просто установите сообщение журнала, чтобы увидеть, правильно ли вызывается веб-служба.

Еще одна вещь, которую я хотел бы предложить, - это использование сложного объектав качестве параметра вместо всех этих параметров вы отправляете.

0 голосов
/ 04 ноября 2010

Куча вещей:

  1. Пространство имен, называемое hilo или n0, не имеет значения для сервера.
  2. Я думаю, что есть другая проблема с анализом вашего ответа. Вы должны установить транспортную отладку на true.

androidHttpTransport.debug = true;

, а затем отладьте вызов getResponse и посмотрите, что вы получите. У вас должен быть SoapObject или SoapPrimitive или SoapFault, который содержит ответ от сервера. Если для параметра debug задано значение true, вы также увидите необработанный XML-ответ в bodyIn. Это должно позволить вам понять, что происходит.

...