Я видел некоторых других пользователей с той же проблемой, но, честно говоря, ответы мне не помогли.
У меня есть клиент android, который подключается к веб-службе PHP (используя NuSOAP), и локально все работает нормально. Когда я развернул свой веб-сервис и обновил переменные на клиенте, я получаю следующую ошибку:
org.xmlpull.v1.xmlpullparserexception: неожиданный тип (позиция: END_DOCUMENT null @ 1: 0 в java.io.InputStreamReader@44f11f30)
Это происходит случайным образом – например, для входа в систему, если первая попытка – это «неправильный пароль» (sucessfull connection to the web service), вторая попытка – получить эту ошибку. Если это принято, я получил силу приложения (я начинаю другую деятельность), я полагаю, из-за этой проблемы.
Я не знаю, в чем проблема, потому что я не обрабатываю XML-файл вручную, и мой WDSL в порядке, как вы можете видеть здесь.
Мои строки подключения следующие:
private static final String URL = "http://apkitchen.voku-online.de:8080/webs.php"; private static final String NAMESPACE = "urn:hellowsdl"; final String SOAP_ACTION = "urn:hellowsdl#auth"; final String METHOD_NAME = "auth"; SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
Моя полная функция подключения:
public Object soap(String METHOD_NAME, String SOAP_ACTION, String NAMESPACE, String URL) throws IOException, XmlPullParserException { SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); request.addProperty("username", "Maxxd"); request.addProperty("password", "xxxx"); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.setOutputSoapObject(request); HttpTransportSE httpTransport = new HttpTransportSE(URL); httpTransport.call(SOAP_ACTION, envelope); Object result = envelope.getResponse(); return result; }
Я честно понятия не имею, почему это происходит … любая помощь?
НАЙДЕНА ПРОБЛЕМА (НО НЕ РЕШЕНИЕ …)
Я удалил файл xml ответа и выглядел так, как будто он сформирован:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:authResponse xmlns:ns1="urn:hellowsdl"> <return xsi:type="xsd:string">0</return> </ns1:authResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> <!..................
Сам конверт это нормально, но нет конца тега комментария … как я могу это решить?
Похоже, что это проблема для реализации андроида KSOAP2 на уровне api <9.
Он решается с помощью
System.setProperty("http.keepAlive", "false");
Надеюсь, это кому-то надежда, потому что я видел десятки людей с той же проблемой.
Я не уверен, что это поможет вам, но у меня было то же исключение. Когда я изменил версию Envelope с 11 на 10, она волшебным образом исчезла: o. Может быть, вы захотите попробовать.
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);