Требует ли Ksoap2, чтобы веб-служба создавала wsdl?

#php #android #web-services #ksoap2

#php #Android #веб-сервисы #ksoap2

Вопрос:

Я успешно написал приложение для Android, которое вызывает asp.net веб-служба, использующая Ksoap2. Теперь я хочу перенести приложение на использование веб-службы PHP. Я успешно перенес веб-службу на собственный веб-сервис PHP (и протестировал его с помощью PHP-клиента), но у меня возникли проблемы с вызовом его с помощью KSOAP. Одна мысль, которая поразила меня, заключалась в том, что собственный веб-сервис PHP не был создан с использованием wsdl и не способен автоматически генерировать wsdl. Требуется ли ksoap2 для wsdl для успешного вызова метода веб-службы?

The asp.net веб-сервис находится по адресу http://mycomputer/AlumLocateService/Service.asmx

Для успешного вызова asp.net обслуживание:

 private static final String NAMESPACE = "http://mycomputer/";
private static final String URL = "http://mycomputer/AlumLocateService/Service.asmx";
private static final String METHOD_NAME_3 = "FindCloseDetails";
private static final String SOAP_ACTION_3  = NAMESPACE   METHOD_NAME_3;

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_3);
PropertyInfo pi = new PropertyInfo();
pi.setName("userid");
pi.setValue(userid);
pi.setType(string.class);
request.addProperty(pi);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

androidHttpTransport.call(SOAP_ACTION_3, envelope);

//Parse Response
Object myResult = envelope.bodyIn;
SoapObject resultsRequestSOAP = (SoapObject) myResu<
String[] results = getStringArrayResponse(resultsRequestSOAP, null);
return results;
  

Служба PHP расположена по адресу http://mycomputer/PHPTest/testserver.php и воспроизводит методы asp.net веб-сервис. Я надеялся, что все, что мне нужно будет сделать, это изменить следующее

 private static final String URL = "http://mycomputer/PHPTest/testserver.php"; 
  

и удалите строку

 envelope.dotNet = true;
  

но когда я это делаю, я получаю «XmlPullParserException: неожиданный тип (позиция END_DOCUMENT null ….» при выполнении вызова androidHttpTransport.call (SOAP_ACTION_3, envelope).

Комментарии:

1. не могли бы вы, пожалуйста, указать код, используемый для вызова веб-сервиса PHP с использованием KSOAP2

2. Теперь я внедрил свой PHP-сервис, используя Zend_Soap_Server, а не собственный SoapServer. Zend_Soap_Server способен автоматически генерировать WSDL.

Ответ №1:

Тот, который я изменил на использование PHP Zend_Soap_Server, мне пришлось изменить последнюю часть моего кода Android на:

 Object myResult = envelope.getResponse();
String[] results = null;
if (myResult instanceof Vector)
{
    Vector<Object> myVector = (Vector<Object>) myResu<

results = new String[myVector.size()];

for (int i = 0; i< myVector.size();i  ){

    results[i] = myVector.elementAt(i).toString();
}
} 

return results;
  

Комментарии:

1. Я только что проверил — собственный php SoapServer также работает теперь, когда я изменил код Android.