黑森州的本地日期

问题描述

我正在尝试使用 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);
  }
}

这是输出

java.lang.StackOverflowError 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 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) 在 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)

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

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)