我有客户端 - 服务器系统。它们通过RMI进行通信,因此涉及序列化/反序列化。服务器根据请求向客户端发送响应。如果发生异常,则在响应中设置。
但是,如果在服务器上发生某些异常,并且客户端不知道它。所以我需要包装原始异常,但要保持堆栈跟踪以进行调试。有更优雅的解决方案吗?
//response from server to client
class Response {
private MyException e;
public void set(MyException e) {
this.e = e;
}
}
//some other code
catch (MyException e) {
response.set(e);
} catch (Exception e) {
//could be exception which does not exist at client
//so I can not just set because it would cause ClassNotFoundException at client
response.set(new MyException(e.getMessage() + ": " + e.getStackTrace()));
}
似乎API仅支持设置cause
,由于上述问题,我无法设置{{1}}。我可以在没有设置原因的情况下从另一个异常设置堆栈跟踪吗?
答案 0 :(得分:1)
您可以考虑方法setStackTrace(),例如:
Throwable originalException = ...;
Throwable clientException = ...;
clientException.setStackTrace(originalException.getStackTrace());
stacktrace元素本身似乎只包含字符串,因此对于不了解特殊服务器类的客户端来说,这不应该是一个问题。