Skip to content

继承BaseResponse<ByteArrayOutputStream>的Resp类在反序列化时产生InaccessibleObjectException #171

@kelgon

Description

@kelgon

在API返回非200状态码(如权限问题、QPS超限等场景)时,SDK会将RawResponse反序列化为Resp类,以获取错误信息。

但继承BaseResponse<ByteArrayOutputStream>Resp类(主要见于文件下载类API),由于其data字段的类型为ByteArrayOutputStream,在jdk17进行反序列化时,gson会抛出InaccessibleObjectException(因为ByteArrayOutputStream存在非public字段bufcount),导致程序无法正确获取API返回的code和msg

ByteArrayOutputStream本身其实不具备反序列化的可能性,SDK应当在处理此类数据时避免反序列化Resp类的data字段

举例:
GetMessageResourceResp

public class GetMessageResourceResp extends BaseResponse<ByteArrayOutputStream> {

MessageResource类中对GetMessageResourceResp的反序列化操作

GetMessageResourceResp resp = UnmarshalRespUtil.unmarshalResp(httpResponse, GetMessageResourceResp.class);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions