在尝试序列化和反序列化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 序列化和反序列化错误。