有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有没有办法在XStream生成的XML中输入版本号?

我使用XStream序列化我的域对象

我想在生成的xml文件中添加一些版本控制信息,以防域模型发生更改

有没有一种使用xstream的方法

我更喜欢根标记(<object-stream>)中名为“version”的参数,但其他任何参数都可以

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    查看以下项目

    XMT

    允许您提供迁移方法,以便可以反序列化序列化对象的旧版本

  2. # 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提供的默认转换器以添加 将属性版本化为所有域对象,而不写入一个Converter 为他们每个人上课