dubbo 3.1.9 版本
我用的 spring-boot, 在配置文件里加入了
dubbo:
application:
# 关闭序列化严格检查
check-serializable: false
protocol:
serialization: hessian2
hessian:
allow-non-serializable: true
但仍然报 must implement java.io.Serializable
.
我做了点研究,发现 allow-non-serializable 似乎无法生效,源码里用的
serializerFactory.setAllowNonSerializable(Boolean.parseBoolean(System.getProperty("dubbo.hessian.allowNonSerializable", "false")));
这样似乎只有 jvm 的 -D 配置才行?我不得已改了 jvm,但发现仍然报错,这回 isAllowNonSerializable 返回 true 了,但还是报错,追踪源码又发现了这个:
@Override
protected Deserializer getDefaultDeserializer(Class cl) {
try {
// pre-check if class is allow
defaultSerializeClassChecker.loadClass(getClassLoader(), cl.getName());
} catch (ClassNotFoundException e) {
// ignore
}
if (!Serializable.class.isAssignableFrom(cl)
&& (!isAllowNonSerializable() || !defaultSerializeClassChecker.isCheckSerializable())) {
throw new IllegalStateException("Serialized class " + cl.getName() + " must implement java.io.Serializable");
}
return new JavaDeserializer(cl);
}
这个 !isAllowNonSerializable() || !defaultSerializeClassChecker.isCheckSerializable() 的判断让我搞不懂了,两个都必须是 true 才行?也就是 check-serializable 需要打开,而我打开了 check-serializable
轮到 loadClass 里面报错了,这到底应该怎么整啊??
3条答案
按热度按时间5fjcxozz1#
Fixed in #12054
b1uwtaje2#
现在是什么情况 我也报这个错了
hpxqektj3#
现在是什么情况 我也报这个错了
请问使用的是什么版本呢