在Java序列化中排序xml超类元素

前端之家收集整理的这篇文章主要介绍了在Java序列化中排序xml超类元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须使用JAXB在JAVA中对ParentClass和ChildClass进行分类.
ChildClass扩展了ParentClass.
当我序列化ChildClass的一个对象时,在生成XML中,ParentClass属性首先出现,我想首先使用ChildClass属性,然后是ParentClass属性.

这可能吗?

谢谢

解决方法

JAXB执行此操作的原因是为了匹配XML模式中的继承.但是,您可以执行以下操作:

>标记父@XmlTransient
>在子类上设置propOrder

import javax.xml.bind.annotation.XmlTransient;

@XmlTransient
public abstract class Parent {

    private String parentProp;

    public String getParentProp() {
        return parentProp;
    }

    public void setParentProp(String parentProp) {
        this.parentProp = parentProp;
    }

}

儿童

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement
@XmlType(propOrder={"childProp","parentProp"})
public class Child extends Parent {

    private String childProp;

    public String getChildProp() {
        return childProp;
    }

    public void setChildProp(String childProp) {
        this.childProp = childProp;
    }

}

演示

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Child.class);

        Child child = new Child();
        child.setParentProp("parent-value");
        child.setChildProp("child-value");

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
        marshaller.marshal(child,System.out);
    }

}

产量

<child>
    <childProp>child-value</childProp>
    <parentProp>parent-value</parentProp>
</child>

猜你在找的Java相关文章