我正在实现一个抛出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处理调用,因为在内部我对整个堆栈跟踪感兴趣.