Сериализация и десериализация Throwable в JDK 1.6 и JDK 1.7 с использованием ProtoStuff
У нас есть две системы, одна из которых работает с JDK 1.6, а другая - с JDK 1.7. Для связи между двумя узлами мы используем сериализацию ProtoStuff для преобразования двоичного файла и передачи в другой узел, где снова исполняется двоичный код.
В JDK 1.7 добавлено новое поле 'suppressedExceptions', поэтому теперь, если мы сериализуем Throwable в JDK 1.7 в одном узле и перенесем в другой узел, его де-сериализовать невозможно, и наоборот.
Поскольку два узла используют разные технологии, невозможно перейти с JDK 1.6 на JDK 1.7 и JDK 1.7 на JDK 1.6.
Есть ли решение для решения этой проблемы, заранее спасибо за ответ.
С уважением, Паван
1 ответ
Protostuff-runtime не поддерживает обратную совместимость между двумя версиями классов, если новое поле добавлено к одному из базовых классов. Это вызвано tag
shift - когда вы добавляете новое поле в базовый класс, все tag
числа в дочерних классах сдвинуты. Так что, в общем, нет хорошего решения вашей проблемы.
Но если вы переключите кодировку на json, проблема должна исчезнуть. С protostuff-json
поля хранятся с использованием их имен (вместо тегов), поэтому добавление нового поля в середине иерархии классов больше не должно быть проблемой.