• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 如何處理Web服務異常(1)

    發表于:2007-06-13來源:作者:點擊數: 標簽:
    異常是一個事件,它出現在程序執行過程當中,會中斷程序指令的正常流程。如果一種方法或者一項Web服務操作出現錯誤,就會出現異常。引起錯誤的可能是程序 缺陷 或者缺少系統資源。典型的問題包括如下:用戶輸入錯誤:用戶無意中輸入了不正確的字符; 物理限

    異常是一個事件,它出現在程序執行過程當中,會中斷程序指令的正常流程。如果一種方法或者一項Web服務操作出現錯誤,就會出現異常。引起錯誤的可能是程序缺陷或者缺少系統資源。典型的問題包括如下:用戶輸入錯誤:用戶無意中輸入了不正確的字符; 物理限制:磁盤空間已滿或者溢出可用內存;設備錯誤:硬件不能正常工作,如無法啟用的USB移動硬盤;網絡錯誤:應用服務器試圖使用Java數據庫連接性(JDC)連接到遠程數據庫。

    要是被調用方法即提供者出現錯誤,就必須通知調用程序即使用者。這時,通過編程實現的復雜的異常處理就可以發揮作用:異常出現在調用程序面前,以便從異常中恢復過來。高明的編程人員通常會預料到異常,然后通過編寫程序來處理它們;不過,不是所有異常都是能預料到的,也不是所有異常都是能夠恢復的。要是沒發現異常處理程序,運行系統就會終止、出現不可靠的動作。

    Java和.Net等編程接口擁有一系列廣泛、復雜的異常處理功能。開發人員可以使用if-then-else條件結構和try-catch-finally代碼塊來構建一組豐富的錯誤處理模式。使用這樣一些異常處理模式,開發人員就可以降低程序嚴重崩潰或者程序突然終止的風險,并且為應用程序添加可靠性。

    在基于Web服務的分布式架構里面,異常處理必須滿足額外需求。如今,異常必須能獨立于操作系統、編程語言和應用程序進行傳送。異常必須提供給使用者,那樣它們就隨時可以解釋; 如果某異常能夠恢復,使用者就可以無縫應答Web服務提供者拋出的異常,提供者可能在企業IT部門的里面,也可能在外面。在傳送這種異常時,還要關注企業安全。如果異常處理不嚴格、不認真、不慎重,提供者的Web服務就有可能把內部IT資產的詳細信息透露給使用者,或者在堆棧跟蹤中泄漏敏感的企業信息。

    為了探討Web服務的異常處理,本文構建了一個簡單的Java類,使用眾多的類似方法對兩個數進行除法運算。這些方法處理異常的能力各不相同,有的方法完全缺少異常處理機制,而有的方法對許多異常場景擁有顯式異常處理結構。如圖1所示,我們使用以下組件來準備異常處理測試

    1.BEA WebLogic Portal 9.2是面向基于Java應用開發的一款應用服務器。安裝程序包括BEA Workshop for WebLogic Platform,這是用于迅速構建Web服務的一種IDE。我們決定使用WebLogic,因為它在業界的應用很廣泛,而且易于構建Web服務。

    2.Crosscheck Networks SOAPSonar是一個Web服務測試客戶程序,它使用WSDL,并且可以為目標Web服務生成功能、性能、互操作性和漏洞等測試。

    未保護的Web服務

    第一個Web服務根本沒有防范不利條件的機制。如以下代碼所示,這個基本方法讀入幾個雙精度輸入,然后除數除被除數,返回作為結果的雙精度值。

    package mathservice; 
    

    import javax.jws.*;

    @WebService

    public class DivideWS {

    @WebMethod

    public double nakedDivide(double dividend, double divisor)

    {

     return dividend/divisor;

    }

    }

    測試顯示了nakedDivide(…) Web方法的行為:正面測試顯示,Web服務對輸入數字進行了正常除法; 如果輸入了零除數,應用服務器就會進行恰當處理,并返回INF值; 如果被除數或者除數什么也沒有輸入,就會顯示詳細的堆棧跟蹤,還有關于XML處理內部的列表信息,譬如串行化器、SOA服務器協議處理程序和實現平臺。

    一般而言,堆棧跟蹤信息對Web服務使用者毫無用處,使用者也沒有多少辦法可以從這樣的通用、冗長的異常中恢復過來。這不像一組簡單的文檔返回代碼發送到客戶程序、從除以零或者空值異常中輕松恢復過來。發送到客戶程序的堆棧跟蹤信息不但毫無用處、代碼上不可執行,它還可能會把實現細節傳送給外部使用者,有可能被人進一步利用。

    防御性Web服務

    下面的代碼片顯示,防御性Web服務defensiveDivide(…)建立在前一個方法nakedDivide(…)上的基礎上,添加了簡單的檢查機制查看除數是不是零。這可以確保除以零錯誤不會出現。如果除數是零,該方法就會返回0,那樣調用程序就可以從不合適的零除數輸入中恢復過來。在這種方法中,編程人員預料到了邊界條件,編寫防御性代碼來處理它。

    @WebMethod 
    

    public double defensiveDivide(double dividend, double divisor)

    {

    if (divisor != 0)

     return dividend/divisor;

    else

    return 0;

    }

    幾個正面和負面測試很快顯示了defensiveDivide(…) Web方法的行為:正面測試顯示,Web服務對輸入數值進行了正常的除法; 如果輸入了零除數,不像nakedDivide(…)會在試圖進行除法運算后,返回表示無限大的INF值,defensiveDivide(…)返回的是編程人員定義的顯式0.0錯誤值,連除法運算試都不試一下;如果被除數或者除數什么也沒有輸入,就像nakedDivide()那樣,就會顯示詳細的堆棧跟蹤,還有關于XML處理內部的列表信息,譬如串行化器、SOA服務器協議處理程序和實現平臺。
    共2頁: 1 [2] 下一頁

    原文轉自:http://www.kjueaiud.com

    ...
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>