この節では、エラーの処理方法について説明します。 エラーには次の二種類があります。
SCA の実行時例外。これは、 コンポーネントの実行やリモートサービスとのやりとりの際に問題が発生したことを表すものです。 ネットワークや設定の問題が原因で起こることがあります。
ビジネスロジックの例外。これは、 プログラマが定義するものです。 PHP の Exception クラスを継承したクラスを作成し、 ビジネスロジックで問題が発生した場合に故意にスローします。
SCA の実行時例外には二つの型があります。
SCA_RuntimeException - SCA ランタイム内で問題が見つかった、あるいは問題が起こったであろうと考えられるということを通知します。 これは、さまざまな理由で発生しえます。 その多くは、対象がローカルであるかリモートサービスであるかにかかわらず発生します。 コンポーネント内のアノテーションのエラーや、 WSDL や PHP ファイルが存在しないなどといった内容です。 ウェブサービスの場合に SCA_RuntimeException がスローされるのは、 リモートのウェブサービスから SoapFault を受け取り、 その失敗コードの内容が「再試行しても成功しないであろう」と判断されるときです。
SCA_ServiceUnavailableException - これは SCA_RuntimeException のサブクラスです。 接続時やリモートサービスの使用時に問題が発生したものの、 再試行すれば成功する可能性がある場合にスローされます。 ウェブサービスの場合にこの例外がスローされるのは、 リモートのウェブサービスから SoapFault を受け取り、 その失敗コードの内容が「再試行すれば成功するであろう」と判断されるときです。
ビジネスロジックの例外の定義やスローは、通常通りの方法でコンポーネントで行います。 そのコンポーネントがローカルにコールされるかリモートからコールされるかは関係ありません。 SCA ランタイムは、ローカルからコールされたコンポーネント内で発生した ビジネスロジック例外をキャッチしません。これは呼び出し元に返されます。 一方、コンポーネントがウェブサービス経由でコールされた場合は SCA ランタイムがそのビジネスロジック例外をキャッチし、再度スローします。 呼び出し元がその例外の定義を知っている (その例外の PHP クラス定義を含むファイルをインクルードしている) ものとして、再度スローされた冷害は元の例外と同じ内容を含みます。 つまり、たとえば getLine() メソッドや getFile() メソッドには ビジネスロジック内のどの位置で例外が発生したのかが含まれます。 例外は、soap fault の詳細フィールドにおいて "Client" というコードで渡されます。