【发布时间】:2013-09-25 12:57:49
【问题描述】:
我正在实现一个抛出ApplicationExceptions 的会话bean。
这些异常具有链式堆栈跟踪,其中可能包含其类在客户端上不可用的异常。类似的东西:
@Override
public void doSomethingSpecial(MyObject o) throws MyException {
try {
legacySystem.handle(o);
} catch (LegacyException e) {
logger.warn(e.getMessage(), e);
throw new MyException(e);
}
}
在这里,客户端可能会遇到一个它没有类的异常。这可能会导致:
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
at sun.proxy.$Proxy0.doSomethingSpecial(Unknown Source)
at com.myapp.client.Client.main(Client.java:56)
Caused by: java.lang.ClassNotFoundException: MyLegacyException
我不希望客户端知道所有可能在服务器端抛出的异常,但是有一个堆栈跟踪永远不会坏。
您如何处理这些问题?实现一个Interceptor,在异常被发送回客户端时解耦堆栈跟踪是否是一个可行的解决方案?但是Interceptor 应该只处理通过RemoteInterface 的调用,因为在内部我对整个堆栈跟踪感兴趣。
【问题讨论】:
-
设计错误。抛出客户不知道的异常是完全没有意义的。
-
Mhh,但在一个巨大的企业应用程序中,我无法了解所有客户端,问题不仅在于抛出的异常。问题是堆栈跟踪中也可能存在未知异常。
标签: java jakarta-ee exception-handling rmi session-bean