【发布时间】:2014-04-19 04:33:34
【问题描述】:
我有以下代码将对象序列化为 Avro。
List childrenList = new ArrayList ();
RootNode root = new RootNode();
root.setChildrenList(childrenList);
ChildNode child1 = new ChildNode();
child1.setParent(root);
childrenList.add(child1);
ChildNode child2 = new ChildNode();
child2.setParent(root);
childrenList.add(child2);
Schema schema = ReflectData.AllowNull.get().getSchema(root.getClass());
DatumWriter datumWriter = new ReflectDatumWriter (root.getClass());
DataFileWriter fileWriter = new DataFileWriter (datumWriter);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
fileWriter.create(schema, baos);
fileWriter.append(root);
但是由于根和子之间的循环引用,这进入了无限循环。
最终,Apache Avro 因 stackoverflow 错误而失败。
我到处搜索了很多,但似乎没有任何选项可以解决此问题。
有人知道如何让 Avro 处理循环引用吗?
更新:我知道另外两个序列化程序框架 - Gson 和 Jackson,只有 Jackson 可以很好地处理循环引用。所以我怀疑 Avro 是否会为此提供解决方案,因为它看起来并不常见?
【问题讨论】:
标签: java serialization avro