SOAP異常處理

2021-09-20 16:43:18 字數 1574 閱讀 7639

在客戶端呼叫服務端方法時候,並不是一帆風順的,就需要soap的異常處理來找到問題的所在:

除錯我們的程式 —— 捕獲異常

考慮乙個我們編寫**時很可能出現的錯誤:在為呼叫的操作輸入引數時,引數中某個元素的名字錯誤或是沒有提供。例如我們把查詢需要的產品**的名字錯誤地寫成了"productcod",這時執行客戶端**,是不可能得到正確的結果的。我們怎麼才能發現這個錯誤呢?

php 5 中新增了很多程式語言中都提供的異常處理機制 try...catch,我們可以把客戶端的實現**包含在這個結構裡 ( 需要注意的是,php 5 中不支援 finally 子句 ):

清單 14. 加入異常處理部分的客戶端**

try 

catch (soapfault $e) 

我們會在瀏覽器中得到這樣的輸出:

清單 15. web 服務端返回的異常資訊:缺少屬性

soapfault exception:  [client] soap-error: encoding: object hasn't 'productcode' property in  c:\xampp\htdocs\soaptest\getproductinfo.php:17  stack trace:  #0 c:\xampp\htdocs\soaptest\getproductinfo.php(17): soapclient->__soapcall('queryspec',  array)  #1

在 這個例子中,異常是由 soapclient 物件直接丟擲的,它檢查輸入的引數,如果發現某個 wsdl 檔案中定義的項沒有被提供,便丟擲這個異常,告訴我們"productcode"屬性沒有被提供。而我們通過有針對性的檢查**,就可以比較容易的發現錯 誤所在。服務端同樣也可能丟擲異常,這些異常通常是客戶端檢查時無法發現的,例如某些邏輯錯誤,如果我們輸入了乙個不合法的產品**,就可能捕獲到服務端 丟擲的「不合法的產品**」異常。為了實現這一功能,我們需要在服務端的**中加入下面的一段語句:

清單 16. web 服務端丟擲產品**無效的異常

if( !$result )

這 段語句在未得到查詢結果的情況下(這時認為原因是提供了無效的產品**),丟擲了乙個 soapfault 異常,用於建立 soapfault 物件的引數包括錯誤**,以及必要的錯誤資訊。需要注意的是,錯誤**只能使用 soap 標準中已定義的值,使用其他的值不會返回正確的資訊。具體可使用的值可以檢視 w3c 的 soap 文件。這樣,在客戶端提供無效的產品**時,會捕獲到的異常資訊:

清單 17. web 服務端返回的異常資訊:產品**無效

soapfault exception:  [soap-env:server] invalid product code! in c:\xampp\htdocs\soaptest\getproductinfo.php:17  stack trace:  #0 c:\xampp\htdocs\soaptest\getproductinfo.php(17): soapclient->__soapcall('queryspec', array)  #1

於是我們就知道提供的產品**是無效的了。

struts 異常處理 全域性異常處理

記錄一下全域性異常處理的過程 處理主動丟擲的異常,轉向錯誤提示頁面。1 寫乙個自己的異常,繼承runtimeexception,從父類生成構造方法 package me.yndy.srtp.exception suppresswarnings serial public class errorexc...

python異常處理 Python 異常處理

使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...

01 異常 異常處理

注意 1 對定義的變數能初始化的盡量初始化,如果賦的值可能產生誤導,可以採用可空型別 例如 double?dnumres null 3 異常 執行的時候出現的錯誤,或bug 編寫 的預期條件玉實際條件不穩合 異常的機制是為了保證程式可以一直正常執行。丟擲異常 throw new exception ...