我開發了一個EJB服務,我的服務只能拋出一種類型的異常 - MyServiceException
。即所有發生的異常都被包裝到MyServiceException
中並重新投射到客戶端。但我不想向客戶端顯示堆棧跟蹤(出於安全原因),我只想記錄此堆棧跟蹤並僅向客戶端顯示錯誤消息。所以簡單地寫下面的代碼就足夠了:如何獲取重新包裝的異常消息?
catch (Exception e) {
logger.error("Error when creating account", e);
throw new MyServiceException("Error when creating account" + e.getMessage());
}
但是如果我有堆棧的方法:1 -2 -3。方法3拋出有意義的異常與消息"Not enough money"
,所以我想將此消息顯示給客戶端。但方法2用新消息"Some problem with your credit card"
重新包裝此異常,因此在方法1 中調用e.getMessage()
將僅返回"Some problem with your credit card"
,而不是"Not enough money"
。如何在此情況下使用異常?如何獲取我扔的所有消息?
好的。但是我怎麼知道我需要調用'exception.getCause()'多少次。如果異常被多次包裹會怎麼樣?換句話說,我希望所有的錯誤消息都會被我拋出,但不會向客戶端提供堆棧跟蹤。 – MyTitle
您可以遞歸調用getCause(),直到它返回null。合同是空的原因表示拋出的第一個原始異常。 – ATrubka
請參閱Throwable.printStackTrace(PrintStream s)方法的代碼。 – ATrubka