Hessian Serialization and Deserialization of java.time.Year



在尝试序列化和反序列化java.time.Year的对象时,它给出了序列化错误并运行到stackOverflow中。

java.lang.StackOverflowError
    at com.caucho.hessian.util.IdentityIntMap.get(IdentityIntMap.java:112)
    at com.caucho.hessian.io.Hessian2Output.getRef(Hessian2Output.java:1359)
    at com.caucho.hessian.io.WriteReplaceSerializer.writeObject(WriteReplaceSerializer.java:144)
    at com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:465)
    at com.caucho.hessian.io.UnsafeSerializer$ObjectFieldSerializer.serialize(UnsafeSerializer.java:297)
    at com.caucho.hessian.io.UnsafeSerializer.writeInstance(UnsafeSerializer.java:216)
    at com.caucho.hessian.io.UnsafeSerializer.writeObject(UnsafeSerializer.java:170)

重现此错误的示例代码是:

@Test
public void testHessianSerializeDeserialize() throws IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    Hessian2Output out = new Hessian2Output(bos);
    out.startMessage();
    Year y1 = Year.of(2017);
    out.writeObject(y1);
    out.completeMessage();
    out.close();
    byte[] data = bos.toByteArray();
    // Deserialize
    ByteArrayInputStream bin = new ByteArrayInputStream(data);
    Hessian2Input in = new Hessian2Input(bin);
    in.startMessage();
    Assert.assertEquals(y1, (Year) in.readObject());
    in.completeMessage();
    in.close();
    bin.close();
}
使用 joda time 'Years

' (org.joda.time.Years( 而不是 java.time.Year 不会给出 Hessian 序列化和反序列化错误。

相关内容

最新更新