很长一段时间我想知道为什么 EJBException 不使用标准的 Throwable.cause 字段来达到它包装的异常?
使原始根本原因复杂化
会变得复杂private String getRootCauseErrorMessage(final Exception ex) {
Throwable currentException = ex;
Throwable nextException = null;
do {
if (nextException != null) {
currentException = nextException;
}
/* For some reason EJBException stores cause in a separate field rather the all generic Throwables */
if (currentException instanceof EJBException) {
nextException = ((EJBException) currentException).getCausedByException();
} else {
nextException = currentException.getCause();
}
} while (nextException != null);
return currentException.getMessage();
}
ps:我在Java6和EJB3上
答案 0 :(得分:0)
Throwable.getCause。 EJBException的某些实现会改进getCausedByException方法以使用getCause方法(类似于RemoteException.getCause方法的改进方式),但听起来您的应用程序服务器不会这样做。