首页 > 解决方案 > 黑森州本地日期

问题描述

我正在尝试使用 com.caucho.Hessian 序列化 java.time.LocalDate 但我得到了 StackOverflowError。

这是一个演示我的问题的示例代码

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.time.LocalDate;

import org.junit.jupiter.api.Test;

import com.caucho.hessian.io.Hessian2Input;
import com.caucho.hessian.io.Hessian2Output;

public class LocalDateTest {

   @Test
   public void testHessianSerialization() throws IOException {
      LocalDate original = LocalDate.now();
      ByteArrayOutputStream os = new ByteArrayOutputStream();
      Hessian2Output output = new Hessian2Output(os);
      output.writeObject(original);
      output.close();

      ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
      Hessian2Input input = new Hessian2Input(in);
      LocalDate copy = (LocalDate) input.readObject();
      assertEquals(original, copy);
  }
}

这是输出

com.caucho.hessian.io.WriteReplaceSerializer.writeReplace( WriteReplaceSerializer.java:184) 在 com.caucho.hessian.io.WriteReplaceSerializer.writeObject(WriteReplaceSerializer.java:155) 在 com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:465) 在 com.caucho.hessian .io.UnsafeSerializer$ObjectFieldSerializer.serialize(UnsafeSerializer.java:299) 在 com.caucho.hessian.io.UnsafeSerializer.writeInstance(UnsafeSerializer.java:218) 在 com.caucho.hessian.io.UnsafeSerializer.writeObject(UnsafeSerializer.java :172) 在 com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:465) 在 com.caucho.hessian.io.WriteReplaceSerializer。writeObject(WriteReplaceSerializer.java:167) at com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:465) at com.caucho.hessian.io.UnsafeSerializer$ObjectFieldSerializer.serialize(UnsafeSerializer.java:299) at com .caucho.hessian.io.UnsafeSerializer.writeInstance(UnsafeSerializer.java:218) 在 com.caucho.hessian.io.UnsafeSerializer.writeObject(UnsafeSerializer.java:172)

我在其他线程中找到了对这个问题的引用,但除了添加自己的序列化程序之外没有真正的解决方案。

我使用的是去年 12 月发布的 Hessian 版本 4.0.65;我本来希望它现在支持 java.time.LocalDate 。有谁知道为什么不是这样?

Hessian 仍然是进行远程呼叫的“好”解决方案,还是我应该切换到不同的协议?

标签: localdatehessian

解决方案


推荐阅读