sunhk

Results 4 comments of sunhk

是有点别扭,但官方文档https://docs.oracle.com/javase/8/docs/platform/serialization/spec/output.html#a5324 并未强调writeReplace的返回值需实现序列化接口,事实上SerializationProxy是否实现序列化接口也并不影响com.alibaba.com.caucho.hessian.io.JavaSerializer的逻辑 java原生的ObjectOutputStream与ObjectInputStream也可正常运行 ``` @Test public void testObjectSerialization() throws IOException, ClassNotFoundException { // given ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); ObjectId objectId = new ObjectId("5f8f4fcf27516f05e7eae5be"); //...

也不能算“刚好”吧,writeReplace作为jdk提供给用户的自定义序列化方式之一,JavaSerializer试图提供支持(由#2031 可看出确实想支持此种序列化方式),虽然成功进行了序列化,但在反序列化过程中却没有恰当解析,强行调用有参构造方法而导致空指针。相对于对现有JavaDeserializer的完善,其实更想知道有没有关于com.alibaba.com.caucho.hessian.io.SerializerFactory的扩展,或者类似的接口,能对特定类型的序列化进行自定义

额,好久没回复了,如果自定义扩展实现较复杂的话,是否可以改下JavaDeserializer中的对象实例化逻辑,借助Objenesis.jar来实例化对象

Objenesis应该也是判断jvm提供商来调用底层逻辑,虽然没细看,但感觉应该可以,反正代码是能跑通的 ```java public class ReflectTest { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, NoSuchFieldException { Objenesis objenesis = new ObjenesisStd(); Class clazz = Class.forName("org.bson.types.ObjectId$SerializationProxy",false,ReflectTest.class.getClassLoader()); ObjectInstantiator instantiator =...