Существует ли способ поместить номер версии в XML, сгенерированный XStream?

Всего два шага:

  1. Переименовать расширение файла библиотеки в «.jar», например: lib.jar

  2. Извлечь файл в папке с Winrar, Winzip и т. д.

8
задан Łukasz Bownik 4 June 2009 в 07:30
поделиться

2 ответа

вы можете зарегистрировать преобразователь, который добавляет желаемый тег управления версиями к корневому элементу

Класс домена

class Person {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Конвертер

class PersonConverter implements Converter {

    public boolean canConvert(Class clazz) {
        return clazz.equals(Person.class);
    }

    public void marshal(Object value, 
                        HierarchicalStreamWriter writer, 
                        MarshallingContext context) {
        Person person = (Person) value;
        writer.addAttribute("version", "0");
        writer.startNode("fullname");
        writer.setValue(person.getName());
        writer.endNode();
    }

    public Object unmarshal(HierarchicalStreamReader reader, 
                            UnmarshallingContext context) {
        Person person = new Person();
        reader.moveDown();
        person.setName(reader.getValue());
        reader.moveUp();
        return person;
    }
}

тестовый сценарий

@Test
public void versioning() {
    Person person = new Person();
    person.setName("Davide");
    XStream xStream = new XStream(new DomDriver());
    xStream.registerConverter(new PersonConverter());
    xStream.alias("person", Person.class);
    System.out.println(xStream.toXML(person));
}

выход

<person version="0">
  <fullname>Davide</fullname>
</person>

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

9
ответ дан 5 December 2019 в 17:40
поделиться

Ознакомьтесь со следующим проектом

XMT

Позволяет вам предоставлять методы миграции, чтобы вы могли десериализовать старые версии сериализованных объектов.

1
ответ дан 5 December 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: