问题描述
我正在尝试使用 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 (将#修改为@)