RuntimeSchema в Protostuff циклические ссылки?
Мы используем Protostuff RuntimeSchema для сериализации наших данных. Это в основном работает, но мы иногда получаем:
java.lang.StackruError
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 ответ
Protostuff поддерживает несколько форматов кодирования (protobuf
, json
и свой graph
).
Если ваши объекты содержат циклические ссылки, то подходит только одна - graph
, Вы можете использовать его с io.protostuff.GraphIOUtil
,
Обратите внимание, что другие кодировки (json
, protobuf
) не может поддерживать циклические ссылки (для этого требуется дополнительная информация, включаемая в сериализованную форму, что на самом деле невозможно).
Дополнительную информацию по этой теме можно найти здесь: http://www.protostuff.io/documentation/object-graphs/