PHP SOAPクライアント要求中に複数のSOAP障害を処理する方法を教えてください。

StackOverflow https://stackoverflow.com//questions/11679432

質問

PHPのSOAPClientを介してSOAPコールをWebサービスにして、監視ステーションから水位を取得することに興味があります。実行中に発生した2つのSOAPFAULTSを処理したいです。最初の故障は次のとおりです。

SoapFault exception: [soapenv:Server.userException] java.rmi.RemoteException: We are sorry, but no data is available from this station at this time in C:\xampp\htdocs\NOAA\LogWriter.php:214 Stack trace: #0 C:\xampp\htdocs\NOAA\LogWriter.php(214): SoapClient->__soapCall('getWaterLevelRa...', Array, Array) #1 C:\xampp\htdocs\NOAA\LogWriter.php(188): getLevel('8531680', '20120726 15:19') #2 {main}
.

このエラーは、一定時間のデータが利用できない場合、スクリプト中に数回発生すると予想されます。スクリプトに新しい時間でやり直すようにするためにこの障害を引く必要があります。私はキャッチブロックを使ってそうする。

私はまた、WebServiceがWSDLファイルをロードしていないかサーバーがタイムアウトしている場合に発生する2番目の障害をキャッチする必要があります。これをテストするには、スクリプトが私が以前に受信したのと同じエラーを生成するための不完全な場所に、次のとおりです。

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://opendap.co-ops.nos.noaa.gov/axis/services/WaterLevelRawOneMin?wsdl' : Extra content at the end of the document in C:\xampp\htdocs\NOAA\LogWriter.php:210 Stack trace: #0 C:\xampp\htdocs\NOAA\LogWriter.php(210): SoapClient->SoapClient('http://opendap....', Array) #1 C:\xampp\htdocs\NOAA\LogWriter.php(171): getLevel('8531680', '20120726 12:35') #2 {main} thrown in C:\xampp\htdocs\NOAA\LogWriter.php on line 210  
.

2番目のエラーは無意識のままで、私のスクリプトを終了します。ただし、キャッチしてメッセージを表示する必要があります。

私はSOAP呼び出しを以下にするPHP機能を投稿しました。

誰もがこれを行う方法についてのアイデアを私に与えてもらえますか?

function getLevel($id, $date) {

    $client = new SoapClient("http://opendap.co-ops.nos.noaa.gov/axis/services/WaterLevelRawOneMin?wsdl", array('trace' => false));

    $Parameters = array("stationId" => $id, "beginDate" => $date, "endDate" => $date, "datum" => "MLLW",
                        "unit"      => 1, "timeZone" => 1);

    try {
        return $client->__soapCall(
            "getWaterLevelRawOneMin", array('Parameters' => $Parameters),
            array('location' => "http://opendap.co-ops.nos.noaa.gov/axis/services/WaterLevelRawOneMin")
        );
    } catch (SoapFault $e) {
        if (
            $e->faultcode == "soapenv:Server.userException"
            and $e->faultstring == "java.rmi.RemoteException: We are sorry, but no data is available from this station at this time"
        ) {
            return "FAULT";
        } else {
            echo "Could not connect to the server";
        }
    } // end of catch blocK
}// end of function
.

役に立ちましたか?

解決

壊れたWSDLに関する例外は、SOAPClient :: Constructor SO を呼び出す場合にのみ発生する可能性があります。

try {
    $client= new SoapClient($wsdlUrl ,array('trace'=>false));
}catch(Exception $e) {
    // your loging regarding this case 
}
.

SOAPFAULT ExceptionがWebServiceをすべて作成すると、

try {
    $client= new SoapClient($wsdlUrl ,array('trace'=>false));
    try {
       return $client->_call('....');
    } catch (SoapFault $sp) {
        //your logic rearding soap fault 
    }
}catch(Exception $e) {
    // your loging regarding this case 
}
return false;
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top