我们使用原型的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]这显然意味着我们的对象中有某种循环引用。
阅读文档原型理论上确实支持运行时模式中的循环引用,我需要一个配置才能使其工作吗?
我读到过:Dprotostuff.runtime.collection_schema_on_repeated_fields,但它应该只应用于数组项的循环引用,这在我们的对象中不是这样的。
谢谢!
发布于 2017-07-12 05:51:22
原型支持多种编码格式(protobuf、json和它自己的graph)。
如果你的对象包含循环引用,那么只有一个是合适的- graph。您可以将其与io.protostuff.GraphIOUtil一起使用。
请注意,其他编码(json、protobuf)不支持循环引用(它需要将额外的信息包含到序列化的形式中,这在那里是不可能的)。
有关此主题的其他信息可在此处找到:http://www.protostuff.io/documentation/object-graphs/
https://stackoverflow.com/questions/44871484
复制相似问题