2011-09-05 5 views
0

PHP에서 사용자 정의 SoapFaults를 catch 할 수 있는지 궁금합니다. PHP의 사용자 정의 SoapFault

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

그래서 내 웹 서비스에서 나는 오류 이런 식으로 던져

: 나는 코드 작업이 조각 얻을 수없는 나는이 오류를 잡을 때

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를 catch 한 다음 error_code에 따라 사용자 정의 예외를 throw하십시오.

+0

불가능합니다. 서비스는 .NET 응용 프로그램에서 사용됩니다. 그들은 비누로 직접 내 예외를 처리 할 것입니다. – ibram

+0

AFAIK, .NET 응용 프로그램은 서버 측에서 정의한 Exception을 알 수 없습니다. 그들이 할 수있는 일은 오류 코드를 가져 와서 사용자 정의 예외를 던지기위한 것입니다. – xdazz

+0

WSDL에서 정의하지 않는 한? – ibram

관련 문제