dubbo 怎么配置才能让 hessian2 序列类型忽略 Serializable?

qeeaahzv  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(60)

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 里面报错了,这到底应该怎么整啊??

b1uwtaje

b1uwtaje2#

现在是什么情况 我也报这个错了

hpxqektj

hpxqektj3#

现在是什么情况 我也报这个错了

请问使用的是什么版本呢

相关问题