我们正在使用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
但是它假设只适用于数组项的循环引用,而在我们的对象中并非如此。
谢谢!
答案 0 :(得分:0)
Protostuff支持多种编码格式(protobuf
,json
及其自己的graph
)。
如果您的对象包含循环引用,则只有一个适合 - graph
。您可以将其与io.protostuff.GraphIOUtil
一起使用。
请注意,其他编码(json
,protobuf
)不支持循环引用(它需要将其他信息包含在序列化形式中,这在那里是不可能的。)
有关此主题的更多信息,请访问:http://www.protostuff.io/documentation/object-graphs/