@Ostap77

Возможно ли поменять сообщение SOAP-ERROR: Encoding: Violation of encoding rules?

Возможно ли в SOAP переопределить сообщение об ошибке SOAP-ERROR: Encoding: Violation of encoding rules? У меня эта ошибка возникает когда в поле с типом long передаются не корректные данные. Задача заключается в том, что на абсолютно любой не валидный запрос сервис должен отвечать определенными заказчиком ошибками. Проблема в том, что этот ответ я не могу перехватить через try.

$server = new SoapServer('http://somehost/?wsdl', $soap_param);
$server->setClass('SomeClass');
try {
    $server->handle();
} catch (SoapFault $e) {
    throw new SoapFault($faultcode, $faultstring);
}

Отрабатывает метод handle, возвращается ответ
SOAP-ERROR: Encoding: Violation of encoding rules

Скрипт завершает работу.
Пробовал класть результат работы handle в буфер, что бы потом проверить его на предмет наличия этого сообщения, но в случае с этой ошибкой, это не помогает.

ob_start();
    $soapServer->handle();
    $soapXml = ob_get_contents();
    ob_end_clean();
...

Подскажите, каким образом можно переопределить это сообщение?
  • Вопрос задан
  • 890 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Ostap77 Автор вопроса
Как я уже писал, основная проблема заключается в том, что это не ошибка. Перехватить ее через SoapFault не удастся. В то же время, решение, которое описано в документации, в моем случае не работало. Суть в том, что все, что я кладу в буфер до метода handle в него записывается. Но после этого метода, как я писал в вопросе, работа скрипта останавливается и поэтому ob_get_contents() уже бесполезен. Как я понял в этом методе выполняется ob_flush(), или функция ей подобная.
Самым оптимальным для меня в этой ситуации стала просто callback функция, переданная в ob_start("justCallback"), которая вызовется в handle, после очистки буфера.
function justCallback($buffer) {
//в buffer падает результат выполнения. Парсим его и формируем уже нужный нам ответ.
}

Если у кого есть решение получше - пишите.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы