Могу ли я «игнорировать» CannotResolveClassException в Java XStream, чтобы обеспечить ограниченную обратную совместимость? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть приложение, которое использует сериализованную форму карты XStream в качестве формата ведения журнала. Карта и значение может содержать широкий спектр сериализуемых объектов.

Когда журнал считывается обратно в приложение той же версии, в которой он был написан, здесь нет проблем, поскольку все классы будут в то же место, те же имена et c. Однако я хотел бы ввести ограниченную обратную совместимость - например, если программа считывает файл журнала из более старой версии и встречает ссылку на класс, который больше не существует, я Мне бы хотелось, чтобы он продолжил чтение остальных данных, которые он понимает , и предупредил меня о классах, которые он не смог найти.

Это отличается от обычного поведения, где XStream выдает CannotResolveClassException и отказывается от попыток синтаксического анализа данных.

Существует множество связанных вопросов, касающихся того, как обрабатывать изменения в классе, таком как новые поля, для которых xStream.ignoreUnknownElements();, как правило, кажется лучшим подходом, но этот вопрос касается удаленных классов, а не измененных классов.

Мои исследования привели меня к переопределению XStream s unmarshal() или создать собственный Mapper, который может перехватить исключение и обработать его. Но, возможно, из-за того, что это нишевый вариант использования, я не нашел окончательного ответа о том, как это лучше всего сделать. сделать это?

...