Protostuff循环引用中的RuntimeSchema?

时间:2017-07-02 13:49:37

标签: java protostuff

我们正在使用Protostuff的RuntimeSchema来序列化我们的数据。 这大部分都有效但我们有时会得到:

java.lang.StackOverflowError
at io.protostuff.runtime.ObjectSchema.mergeFrom(ObjectSchema.java:350) ~[protostuff-runtime-1.5.3.jar:1.5.3]
at io.protostuff.CodedInput.mergeObjectEncodedAsGroup(CodedInput.java:336) ~[protostuff-core-1.5.3.jar:1.5.3]
at io.protostuff.CodedInput.mergeObject(CodedInput.java:298) ~[protostuff-core-1.5.3.jar:1.5.3]
at io.protostuff.runtime.RuntimeUnsafeFieldFactory$15$1.mergeFrom(RuntimeUnsafeFieldFactory.java:1217) ~[protostuff-runtime-1.5.3.jar:1.5.3]

这显然意味着我们在对象中有某种循环引用 阅读文档Protostuff理论上支持运行时模式中的循环引用,我需要启用一个配置才能使其工作吗?

我读到:Dprotostuff.runtime.collection_schema_on_repeated_fields但是它假设只适用于数组项的循环引用,而在我们的对象中并非如此。

谢谢!

1 个答案:

答案 0 :(得分:0)

Protostuff支持多种编码格式(protobufjson及其自己的graph)。

如果您的对象包含循环引用,则只有一个适合 - graph。您可以将其与io.protostuff.GraphIOUtil一起使用。

请注意,其他编码(jsonprotobuf)不支持循环引用(它需要将其他信息包含在序列化形式中,这在那里是不可能的。)

有关此主题的更多信息,请访问:http://www.protostuff.io/documentation/object-graphs/