diff --git a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2SerializerFactory.java b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2SerializerFactory.java index 0d886b9d39..893e1a59c6 100644 --- a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2SerializerFactory.java +++ b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2SerializerFactory.java @@ -51,10 +51,7 @@ public class Hessian2SerializerFactory extends SerializerFactory { // ignore } - if (!Serializable.class.isAssignableFrom(cl) - && (!isAllowNonSerializable() || defaultSerializeClassChecker.isCheckSerializable())) { - throw new IllegalStateException("Serialized class " + cl.getName() + " must implement java.io.Serializable"); - } + checkSerializable(cl); return new JavaSerializer(cl, getClassLoader()); } @@ -68,11 +65,20 @@ public class Hessian2SerializerFactory extends SerializerFactory { // ignore } - if (!Serializable.class.isAssignableFrom(cl) - && (!isAllowNonSerializable() || !defaultSerializeClassChecker.isCheckSerializable())) { - throw new IllegalStateException("Serialized class " + cl.getName() + " must implement java.io.Serializable"); - } + checkSerializable(cl); return new JavaDeserializer(cl); } + + private void checkSerializable(Class cl) { + // If class is Serializable => ok + // If class has not implement Serializable + // If hessian check serializable => fail + // If dubbo class checker check serializable => fail + // If both hessian and dubbo class checker allow non-serializable => ok + if (!Serializable.class.isAssignableFrom(cl) + && (!isAllowNonSerializable() || defaultSerializeClassChecker.isCheckSerializable())) { + throw new IllegalStateException("Serialized class " + cl.getName() + " must implement java.io.Serializable"); + } + } }