2010-11-02 2 views
1

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

<?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 [email protected]:0 in [email protected]) 
11-02 03:01:01.151: ERROR/NoaaTideSoap(389): org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT [email protected]:0 in [email protected]) 
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. Я не вижу ответа, возвращающегося из службы, которую я звоню.

Моя мысль в том, что услуга expecing префикс «хило», как они определяют здесь:

и и где мой вызов выглядит следующим образом:

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

и снова разные атрибуты объявления

Кто-нибудь знает, как установить эти значения с помощью 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; 

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

ответ

0

куча вещей:

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

androidHttpTransport.debug = true;

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

0

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

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