通常,良好的架構都會有很好的異常處理模式,Web Service也不例外。
例外的是,當你的項目比較龐大的時候,你的業務方法可能很多并且你并不了解他們的內部實現。
作為一個優秀的Web Service架構師,你需要解決Web服務跟這些業務異常的結合問題。
現實是我們都不想關心這些業務類的實現,盡管這些異常從Java類拋出,并且Web服務必須處理這些
異常,起碼,你需要讓客戶端知道:web服務端拋出異常。
以XFire為例, 假設有一個Web服務A和一個調用A的客戶端B
A服務端 B客戶端
當B->A發起一個Web服務請求,A拋出異常的時候,會直接new XFireFault并扔向XFire客戶端。
解耦思路帶領下,應該先將異常處理剝離出來。
于是,有
A服務-A異常處理handler? B客戶端-B異常處理handler
這樣,從架構的角度,A/B均無需考慮異常問題。
XFire客戶端可以通過addFaultHandler來增加異常處理,XFire服務端則可以通過典型的AOP異常攔截來隔離
業務邏輯和Web服務之間的紐帶。