2017-07-02 43 views
0

我們使用Protostuff的RuntimeSchema來序列化我們的數據。 這主要工作,但我們有時會:RuntimeSchema在Protostuff循環引用中?

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

原生支持多種編碼格式(protobuf,json和它自己的)。

如果您的對象包含循環引用,則只有一個適用 - 。您可以使用io.protostuff.GraphIOUtil

請注意,其他編碼(json,protobuf)不能支持循環引用(它需要附加信息才能包含在序列化表單中,這在其中是不可能的)。

關於這個問題的一些額外信息可以在這裏找到:http://www.protostuff.io/documentation/object-graphs/