Есть ли способ поместить номер версии в XML, сгенерированный XStream?
Я сериализую свои domainObjects с помощью XStream.
Я хотел бы добавить некоторую информацию о версиях в сгенерированный xml-файл на случай, если моя модель домена изменится.
есть ли способ сделать это с помощью xstream ?
Я предпочел бы параметр с именем "version" в корневом теге (<object-stream>
) но все остальное тоже было бы хорошо.
спасибо заранее.
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;
}
}
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
класс для каждого из них
Проверьте следующий проект
позволяет предоставить методы миграции, чтобы можно было десериализовать старые версии сериализованных объектов.