2013-04-03 49 views
2

我有一個有趣的場景,我在catch子句中設置HttpServletResponse錯誤。 「response.sendError(..)」也會引發異常。在異常處理期間處理異常以保留原始異常詳細信息的最佳方式是什麼?多個Java根本原因異常

我有這樣的事情:

try { 
... 
} catch(Exception e) { 
    try { 
     response.sendError(500); 
    } catch(IOException e2) { 
     //Can I do something like: 
     //'throw new ServletException(e,e2)' here? 
    } 
} 

換句話說,什麼是捆綁了來自拋出的異常的信息到下一個異常的最好方法?處理第二個異常時,我不想丟失第一個異常的信息。

一般來說,多個try catch塊的可讀性看起來很糟糕。理想情況下,要避免這種混亂。總是可以將嵌入式try/catch捆綁在一個方法中......雖然看起來很糟糕,但並不能解決所有異常細節。

回答

6

嘗試:

try { 
... 
} catch(Exception e) { 
    try { 
     response.sendError(500); 
    } catch(IOException e2) { 
     e2.initCause(e); 
     throw e2; 
    } 
} 
+0

謝謝 - 不知道這是可能的...我猜你的運氣了,如果你正在處理一個已經有根本原因的異常。應該爲這種情況確定。 –

+1

我認爲你可以創建更多的例外並鏈接它們。 – ccleve

+0

如果在e2上已經設置了原因,你會如何處理?這有點棘手。在你的示例代碼中,如果e2上已經設置了原因,'e2.initCause(e);'會拋出一個異常。 – kevinarpe