Я создал веб-сервис SOAP на основе WSDL с использованием PHP 5.3.Я использую Zend Framework для управления сервисом, а ZF, в свою очередь, размещен поверх встроенного в PHP класса SoapServer.
При тестировании с SoapUI я обнаружил, что передача параметра недопустимого типа (например, передачастрока, когда целое число определено WSDL) привело к пустому ответу.Копаясь в коде, я обнаружил, что, когда ZF вызывает SoapServer-> handle (), выполнение умирает с этой фатальной ошибкой:
Fatal error: SOAP-ERROR: Encoding: Violation of encoding rules
Ошибка имеет смысл, но я не могу понять, что это за жизнькак захватить это так, чтобы я мог изящно обращаться с этим.Насколько я понимаю, что handle () должен генерировать исключение, но вместо этого он просто умирает.
Но вот где это становится действительно странным ....
Запуск нескольких тестов с помощью SoapUI без каких-либоКод меняется, дает разные результаты.В большинстве случаев я получаю пустой ответ, но иногда я возвращаю SoapFault (что я и ожидал!).Это не соответствует, однако, и я не могу понять, что вызывает это в любом случае.Насколько я могу судить, у меня отключены функции кэширования в SoapUI, а также кэширование WSDL.Я не знаю, что-то с SoapUI или PHP.Как я уже сказал, странно.
Связанный, я нашел эту старую ошибку PHP:
http://bugs.php.net/36629
, которая звучит ужасно, как моя собственная проблема.Однако я не совсем уверен, что это моя проблема, в основном потому, что документация PHP, охватывающая все это, а также документы для ZF, ужасно неполны.Таким образом, я вполне могу просто делать что-то ужасно неправильное и не знать об этом.В свете этого я хотел бы увидеть простую оболочку, которая показывает правильный способ отловить и обработать ошибки.Но я возьму любую помощь, которую могут предложить люди.