У меня есть приложение, которое использует сериализованную форму карты XStream в качестве формата ведения журнала. Карта и значение может содержать широкий спектр сериализуемых объектов.
Когда журнал считывается обратно в приложение той же версии, в которой он был написан, здесь нет проблем, поскольку все классы будут в то же место, те же имена et c. Однако я хотел бы ввести ограниченную обратную совместимость - например, если программа считывает файл журнала из более старой версии и встречает ссылку на класс, который больше не существует, я Мне бы хотелось, чтобы он продолжил чтение остальных данных, которые он понимает , и предупредил меня о классах, которые он не смог найти.
Это отличается от обычного поведения, где XStream выдает CannotResolveClassException
и отказывается от попыток синтаксического анализа данных.
Существует множество связанных вопросов, касающихся того, как обрабатывать изменения в классе, таком как новые поля, для которых xStream.ignoreUnknownElements();
, как правило, кажется лучшим подходом, но этот вопрос касается удаленных классов, а не измененных классов.
Мои исследования привели меня к переопределению XStream
s unmarshal()
или создать собственный Mapper
, который может перехватить исключение и обработать его. Но, возможно, из-за того, что это нишевый вариант использования, я не нашел окончательного ответа о том, как это лучше всего сделать. сделать это?