2011-09-05 17 views
0

PHPでカスタムSoapFaultsをキャッチすることが可能かどうか疑問に思っていました。私は、コードの作業のこの部分を取得することはできません。PHPのカスタムSoapFault

class UAC_ValidationFault extends SoapFault{ 
    public function __construct($code, $message){ 
     parent::__construct($code, $message); 
    } 
} 

は、だから私のWebサービスでは、私は、エラーをこのように投げる:

throw new UAC_ValidationFault("666", "Test error"); 

私は、このエラーをキャッチしようとすると、私はクラス名を知りたいですしかし、それは常に "SoapFault"です。

try{ 
    $return = $client->testErrorThrow('bogus'); // $client is SoapClient instance 
    print_r($return); 
} 
catch(UAC_ValidationFault $e){ 
    var_dump(get_class($e)); // isn't catched 
} 
catch(Exception $e){ 
    var_dump(get_class($e)); // returns "SoapFault" 
} 

何か提案がありますか?

+0

私は覚えていませんが、 '$ e'例外オブジェクトで' print_r'または 'var_dump'を実行すると、より多くの情報が得られると思います。エラーコード( '$ code')を使用して、おそらくどこからエラーが発生したかを調べることができます。 – Treffynnon

+0

私は知っていますが、スローされたエラーのvar_dump/print_rの "UAC_ValidationFault"には何も言及されていません。それはPHPがネイティブSoapFaultsを投げたいだけです。 – ibram

答えて

0

SoapClientのラップされたクラスを作成できます。 SoapFaultをキャッチし、error_codeに従ってカスタム例外をスローします。

+0

サービスは.NETアプリケーションで使用されません。彼らは石鹸で直接私の例外を処理します。 – ibram

+0

AFAIK、.NETアプリケーションは、あなたのサーバー側で定義された例外を知ることができません。彼らができることは、エラーコードを取得し、カスタム例外をスローすることです。 – xdazz

+0

WSDLで定義しないかぎり? – ibram

関連する問題