一场没有序列化引发的血案
分析思路
- 先分析了该服务的提供方有没有在注册中心注册,检查后发现有注册,并且版本号与调用的客户端配置的是一样的。
- 分析了RPC接口返回的exception 信息 返现了一条关键错误提示:【Caused by: java.lang.IllegalStateException: Serialized class com.xx.dto.DemoDTO must implement java.io.Serializable】
- 经过检查返现该DTO没有 实现 Serializable接口。
问题原因
dubbo接口的数据传输需要进行序列化。
解决方法
在服务提供方,返回的DTO implement Serializeable。
报错信息
Caused by: java.lang.IllegalStateException: Serialized class com.xx.dto.DemoDTO must implement java.io.Serializable at com.alibaba.com.caucho.hessian.io.SerializerFactory.getDefaultSerializer(SerializerFactory.java:261) at com.alibaba.com.caucho.hessian.io.SerializerFactory.getSerializer(SerializerFactory.java:233) at com.alibaba.com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:406) at com.alibaba.com.caucho.hessian.io.JavaSerializer$FieldSerializer.serialize(JavaSerializer.java:313) ... 28 more
不积跬步,无以至千里;不积小流,无以成江海。