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 のドキュメントがひどく不完全であるためです。したがって、私は単にひどく間違ったことをしていて、それを知らないだけかもしれません. それを踏まえて、エラーをトラップして処理する適切な方法を示す単純なシェルを見たいと思っています。しかし、私はそこにいる人々が提供できるかもしれないあらゆる助けを借ります.