Мученикам XStream посвящается
Dec. 28th, 2010 04:06 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Всем мученикам, пытающимся заставить XStream пропускать незнакомые (сиречь не скартированные) теги (вместо того, чтобы кидаться исключением, как оно это обычно делает), посвящается найденное мною решение этой странной проблемы.
При создании объекта XStream требуется переопределить его метод wrapMapper следующим образом:
Основное мучение было с поддержкой неявных коллекций, так как основную часть кода удалось содрать из тестов к тому же XStream.
So this way you can skip unknown tags, guys :)
При создании объекта XStream требуется переопределить его метод wrapMapper следующим образом:
xs = new XStream() { @Override protected MapperWrapper wrapMapper(MapperWrapper next) { return new MapperWrapper(next) { @Override public boolean shouldSerializeMember(Class definedIn, String fieldName) { if ( definedIn==Object.class ) { // Незнакомый тег либо элемент неявной коллекции. boolean niceField = false; try { // Для элементов неявной коллекции есть картирование на класс. niceField = (realClass(fieldName) != null); } catch(CannotResolveClassException crce) {} if ( ! niceField ) log.warn("Пропуск неподдерживаемого блока XML: " + fieldName); return niceField; } return super.shouldSerializeMember(definedIn, fieldName); } }; } };
Основное мучение было с поддержкой неявных коллекций, так как основную часть кода удалось содрать из тестов к тому же XStream.
So this way you can skip unknown tags, guys :)