2011-11-23 48 views
2

有沒有人知道如何在瀏覽器上打印滿堆棧跟蹤當MULE中發生運行時異常.. ??如何在MULE中將堆棧跟蹤返回給客戶端?

發生運行時異常時,MULE向客戶端拋出500服務器錯誤,但不向客戶端顯示詳細信息。它打印在控制檯或日誌文件整個堆棧跟蹤(如以下):

Root Exception stack trace: 
java.sql.SQLException: Invalid column name 
    at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3677) 
    at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:2749) 
    at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:494) 
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' 
    for everything) 

我可以顯示在瀏覽器相同的堆棧跟蹤(到客戶端)??

如果可能的話,還請告訴我如何打開或關閉瀏覽器上的堆棧跟蹤打印。

它可能是一段時間以後,我不希望顯示在瀏覽器堆棧跟蹤)

回答

1

是的,這是可能的。我假設你正在使用一個常規的HTTP端點,並且這是一個REST類型的服務(?)如果是這樣,你可以簡單地在引發異常的代碼周圍放一個try/catch,並返回你想要的任何文本。

還有一些異常策略(http://www.mulesoft.org/documentation/display/MULE3USER/Error+Handling)用於執行更復雜的錯誤處理,但這聽起來像是您在尋找上面的簡單答案。

如果這不能回答您的問題,請提供有關您的mule配置和引發異常的服務的更多信息。

+0

很明顯,我已經在我的整個項目中實現了Try/Catch .. !! ..我以任何形式返回了異常。但是我問的是:假設你把一個「\」字符在URL中,然後MULE返回一個500服務器錯誤(顯然它應該,因爲它是一個URI例外)。但我是否也可以捕獲該異常(在mule_config文件中的某個地方)..? –

+0

這是否意味着你也嘗試了一個例外策略,但這並沒有幫助? – awynne

+0

是啊..我已經嘗試了一個自定義異常策略,但它調用的類只能返回一個Mule-Message,而不是我想要的。 (一個StackTrace或其他的東西這個).. !! –

0

Mule沒有什麼可以做到這一點的。您必須實現一個異常處理程序,它將格式化消息異常有效負載中的堆棧跟蹤並將其返回給調用者。

在你的情況下,HTTP傳輸具有可在HttpMessageReceiver代碼中發現了一個特殊性:

try 
{ 
    conn.writeResponse(processRequest(request)); 
} 
catch (Exception e) 
{ 
... 
    conn.writeResponse(buildFailureResponse(request.getRequestLine().getHttpVersion(), httpStatus, e.getMessage())); 

這意味着,當一個異常作物,達到頂尖水平,創建失敗消息的響應不是可定製的:你會得到這個非常技術性的信息,就是這樣。

我看到兩個選項來解決問題:

  • 子類HttpMessageReceiver,使定製的響應消息中的版本,
  • 贊成碼頭之一刪除HTTP傳輸(看書店示例),並在Web容器級別自定義響應錯誤消息。
+0

我從來沒有從我的JAVA類拋出異常。我所有的java類中的每個異常都被捕獲。但是,如果MULE自身產生一個異常(如「URL異常」)會怎麼樣? (我在下面的其他評論中解釋了這種情況。)。我怎樣才能捕捉到異常以及.. ?? –

+0

改進我的迴應。 –