我使用 PHP 5.3 创建了一个基于 WSDL 的 SOAP Web 服务。我使用 Zend Framework 来处理服务,而 ZF 又位于 PHP 的内置 SoapServer 类之上。
在使用 SoapUI 进行测试时,我发现传递无效类型的参数(例如,当 WSDL 定义整数时传递字符串)会导致空响应。深入研究代码,我发现当 ZF 调用 SoapServer->handle() 时,执行会因以下 fatal error 而终止:
Fatal error: SOAP-ERROR: Encoding: Violation of encoding rules
这个错误是有道理的,但是对于我的生活,我无法弄清楚如何捕获它以便我可以优雅地处理它。我的理解是,handle() 应该抛出一个异常,但它只是死了。
但这就是它变得非常奇怪的地方......
使用 SoapUI 运行多个测试,而不进行任何代码更改,会产生不同的结果。大多数时候,我得到的是空的响应,但偶尔,我会得到一个 SoapFault(我所期望的!)。然而,它并不一致,我无法弄清楚是什么触发了它。据我所知,我关闭了 SoapUI 中的缓存功能以及 WSDL 缓存。我不知道它是否与 SoapUI 或 PHP 有关。正如我所说,很奇怪。
相关,我发现了这个旧的 PHP 错误:
http://bugs.php.net/36629
这听起来很像我自己的问题。不过,我并不完全相信这是我的问题,主要是因为涵盖所有这些的 PHP 文档以及 ZF 的文档非常不完整。因此,我很可能只是在做一些非常错误的事情并且不知道。鉴于此,我希望看到一个简单的 shell,它显示了捕获和处理错误的正确方法。但我会接受人们可能提供的任何帮助。
最佳答案
你可以试试评论:https://bugs.php.net/bug.php?id=50547#1298563236 (页面上的第三条评论)?
Xdebug might be the problem. When using xdebug_disable() before calling the handle() method, the server responds with a proper SOAP message which says that something went wrong.
我遇到了完全相同的问题(有时是空响应,有时是正确的 SoapFault)。
xdebug_disable()
救了我。
关于php - 无法处理 PHP 的 SoapServer->handle() 方法中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3217399/