2013-09-03 2 views
0

Я реализовал свой веб-сервис SOAP после учебника, найденного на веб-сайте разработчиков Google, и теперь я пишу приложение для Android, которое вызывает доступную услугу и показывает результат (теперь в текстовом виде) используя библиотеки ksoap2. Вот код:Результат вызова SoapObject всегда равен нулю

public class DownloadDataTask extends AsyncTask<Void, Void, SoapObject> { 
private static String METHOD_NAME = "getData"; 
private static String SOAP_ACTION = "http://example.com/getData"; 
private static String WSDL_URL = "http://arduino-data-server.appspot.com/FunctionsService.wsdl"; 
private static String NAMESPACE = "http://example.com/"; 
private MainActivity caller_activity; 

public DownloadDataTask(MainActivity a) { 
    caller_activity = a; 
} 

@Override 
protected SoapObject doInBackground(Void... arg0) { 
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
      SoapEnvelope.VER12); 
    envelope.setOutputSoapObject(request); 
    HttpTransportSE androidHttpTransport = new HttpTransportSE(WSDL_URL); 

    try { 
     androidHttpTransport.call(SOAP_ACTION, envelope); 
     SoapObject result = (SoapObject) envelope.getResponse(); 
     return result; 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (XmlPullParserException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return null; 
} 

@Override 
protected void onPostExecute(SoapObject result) { 
    TextView tw = (TextView) caller_activity.findViewById(R.id.text_view); 
    if (result == null) { 
     tw.setText("NULL"); 
    } else { 
     tw.setText(result.getName()); 
    } 
} 
} 

, но каждый раз, результат SoapObject это нуль. что не так? на журнале сервера appengine я вижу, что приложение для Android запрашивает wsdl-файл, но запрос на обслуживание не отправляется. Что не так (wsdl-файл доступен для ввода URL-адреса внутри моего кода)?

ответ

1

Ksoap не использует wsdl (и поэтому не запрашивает его). Вы должны передать служебный url вместо wsdl url. Сервисный url вы можете найти в wsdl (атрибут location элемента address в разделе описания услуги).

+0

ОК, спасибо. Таким образом, учебник ksoap2, за которым я следую, был неправильным .. Он сказал мне добавить URL-адрес wsdl, а не URL-адрес службы – giozh

+0

Но проблема все еще остается, всегда null были возвращены webservice. Может быть, я ошибаюсь, когда создаю конверт с мылом? – giozh

+1

Почему вы используете 'SoapEnvelope.VER12'? Wsdl содержит определение только для версии 1.1. Попробуйте изменить это на 'SoapEnvelope.VER11'. – esentsov