[personal profile] zinal
Всем мученикам, пытающимся заставить XStream пропускать незнакомые (сиречь не скартированные) теги (вместо того, чтобы кидаться исключением, как оно это обычно делает), посвящается найденное мною решение этой странной проблемы.

При создании объекта 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 :)

Profile

zinal: (Default)
Maksim Zinal

April 2017

M T W T F S S
     12
3456 789
10111213141516
17181920212223
24252627282930

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 29th, 2025 04:21 am
Powered by Dreamwidth Studios