Как избавиться от исключения Unipot SoapFault: выглядит так, как будто у нас нет XML-документа в … "error

Я пытаюсь разработать бизнес-логику для динамического сайта, используя nusoap на стороне сервера (потому что мне нужны wsdls, а расширение PHP SOAP не может генерировать wsdls) и PHP SOAP extenstion на стороне клиента.

Тем не менее, я не могу получить даже логин и функции getRole. Когда я пытаюсь вызвать клиента, я получаю следующее сообщение

Uncaught SoapFault exception: [Client] looks like we got no XML document in [some paths]... 

Wsdl существует на стороне сервера, и клиент его читает (когда я помещаю неверный url для wsdl, я получаю сообщение об ошибке).

Может ли кто-нибудь помочь?

Похоже, ваш клиент получает недействительный XML – либо сам WSDL, либо ответ, возвращаемый сервером. Попробуйте вызвать клиент с параметром trace установленным в TRUE, и проверьте фактический XML-отправление / получение с помощью __getLastRequest() и __getLastResponse() .

У меня была аналогичная проблема; Оказывается, мой сервис выводит некоторые отладочные данные. Я удалил все echo линии, и он работал нормально.

У меня та же проблема, и я решил с этим:

Файл SOAP сервера в php имеет кодировку utf8 с спецификацией, заставляя apache отправлять обратно метку спецификации (3 байта) до ответа xml.

Кодируйте ваш soap-сервер php с помощью значка utf8 WITH OUT BOM.

Игнасио Гутьеррес Торреро

Скорее всего, в конце вашего класса SOAPServer есть пробелы в конце. Пожалуйста, просмотрите следующее сообщение в блоге для получения дополнительной информации: http://arnekroeger.blogspot.com/2011/02/php-soap-error-looks-like-we-got-no-xml.html

В моем случае эта ошибка появилась, когда я включил скрипт с пустыми строками после метки «?>».

Удаление этих строк решает проблему

Не забудьте использовать блок try / catch:

 try { var_dump($client->foo()); } catch (Exception $e) { echo($client->__getLastResponse()); echo PHP_EOL; echo($client->__getLastRequest()); } 

Просто используйте trim () для вас args.

 $objectRequette = trim($_POST['Requette']) ; $client = new SoapClient(null, array( 'location' => 'http://your.php', 'uri'=>'your option', )); $result = $client->__soapCall('Misyka', array("$objectRequettea")); 

Несколько раз спецификация может генерировать дополнительные символы, которые создают этот тип проблемы.

Чтобы определить, есть ли какая-либо спецификация UTF, см. Эту ссылку .

У меня always_populate_raw_post_data же проблема.my проблема решена set always_populate_raw_post_data до -1 на php.ini.

Я узнаю это, добавив «trace» => 1, «exceptions» => 1 в опции и использую try catch и получить __getLastRequest() и __getLastResponse()

Ниже может быть проблема для некоторых пользователей. потому что я прошел через это.

Для последней версии nuSoap ниже будет решена ваша проблема:

НАЙТИ код ниже в nusoap.php

 $this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]"); 

в строке 6132 или что-то вокруг этого нет.

И КОММЕНТАРИЙ

 // $this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]"); 

Так как это просто для отладки. поэтому не стоит беспокоиться о каких-либо проблемах с функциональностью.

У меня есть способ решить эту проблему. Это не очень хорошее решение, но оно работает …

Как я не могу сделать никаких изменений в моем богослужебном сервере, я решил сделать это …

Сначала мне нужно заставить замолчать SoapFault:

 try { $client = new SoapClient('http://www.mymantisaddress.com/api/soap/mantisconnect.php?wsdl', array('trace'=> 1, 'exceptions' => 0)); $result = $client->__soapCall($function_name, $args); } catch (SoapFault $e) { //$result = array( // 'erro' => $e->faultstring //); } 

Во-вторых, я заметил, что в начале моей строки был три трейловых элемента управления, поэтому я удалил его:

 $str = substr($client->__getLastResponse(), 3) . "pe>"; print $str; 

В-третьих, я должен положить «pe>» в конце моей строки, потому что он был неполным.