Есть ли способ поместить номер версии в XML, сгенерированный XStream? - PullRequest
8 голосов
/ 04 июня 2009

Я сериализую свои domainObjects, используя XStream.

Я хотел бы добавить некоторую информацию о версиях в сгенерированный файл XML на случай, если моя модель домена изменится.

Есть ли способ сделать это с помощью xstream?

Я бы предпочел параметр с именем "version" в корневом теге (<object-stream>), но все остальное тоже было бы хорошо.

Заранее спасибо.

Ответы [ 2 ]

9 голосов
/ 04 июня 2009

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

Доменный класс

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;
    }
}

TestCase

@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, для добавления атрибут управления версиями для всех объектов домена без записи одного Converter класс для каждого из них

1 голос
/ 09 марта 2010

Проверить следующий проект

ПРД

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

...