我使用 PHP 5.3 创建了一个基于 WSDL 的 SOAP Web 服务。我使用 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 错误:
这听起来很像我自己的问题。不过,我并不完全相信这是我的问题,主要是因为涵盖所有这些的 PHP 文档以及 ZF 的文档非常不完整。因此,我很可能只是在做一些非常错误的事情并且不知道。鉴于此,我希望看到一个简单的 shell,它显示了捕获和处理错误的正确方法。但我会接受人们可能提供的任何帮助。