使用stacktrace从另一个异常初始化异常?

时间:2014-06-10 12:09:17

标签: java exception exception-handling client-server stack-trace

我有客户端 - 服务器系统。它们通过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}}。我可以在没有设置原因的情况下从另一个异常设置堆栈跟踪吗?

1 个答案:

答案 0 :(得分:1)

您可以考虑方法setStackTrace(),例如:

Throwable originalException = ...;
Throwable clientException = ...;
clientException.setStackTrace(originalException.getStackTrace());

stacktrace元素本身似乎只包含字符串,因此对于不了解特殊服务器类的客户端来说,这不应该是一个问题。