sofastack / sofa-rpc

SOFARPC is a high-performance, high-extensibility, production-level Java RPC framework.
https://www.sofastack.tech/sofa-rpc/docs/Home
Apache License 2.0
3.81k stars 1.17k forks source link

sofa-rpc hessian2 generic对自定义的Java Throwable类型反序列化成了Generic Object的问题 #1258

Closed rickey17 closed 1 year ago

rickey17 commented 1 year ago

Describe the bug

sofa-rpc hessian2 generic对自定义的Java Throwable类型,会反序列化成了Generic Object,然后被当作正常处理

自定义的Java Throwable类型比如: public class MockError extends RuntimeException {

public MockError() {
    super();
}

public MockError(String message) {
    super(message);
}

public MockError(String message, Throwable cause) {
    super(message, cause);
}

public MockError(Throwable cause) {
    super(cause);
}

} 反序列化的结果变成了: image

这种情况对网关/代理等没有scheme的组件特别不优化,容易把异常当作成功进行处理。

Expected behavior

1、如果客户端和服务端都能load对应的自定义的Java Throwable类型,那么需要反序列化成对应的类型 1、如果客户端和服务端有类型兼容问题(服务端存在自定义的Java Throwable类型,但是客户端不存在该类型或者有兼容性问题),那么需要反序列化成通用的Java Exception类型

Environment