如何避免在@XmlType propOrder 中添加所有字段并从父 class 导入字段

How to avoid adding all fields in @XmlType propOrder and also import the fields from parent class

我正在尝试使用 JAXB 注释编组输入,但我遇到了一些小问题。想确认是否可以实现

我有两个 classes parentchild 每个都有很多字段。 child class 扩展 parent class.

  1. 是否可以将 parent class 中的元素添加到 child class prepOrder 中用于 @XmlType?

  2. 是否需要在propOrder内添加所有元素?例如,如果我有 10 个字段,我只想订购其中的 4 个字段。休息可以按他们想要的任何顺序出现。是否有可能做到这一点?因为当我不添加字段时我收到错误。


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Parent",propOrder={"city","year"})
public class Parent{
    private String brand;
    private String city;
    private String year;
    
    //Getters and Setters avoided
}
@XmlRootElement(name = "Car")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Child",propOrder={"engine","brand","build"})
public class Child{
    private String engine;
    private String build;
    
    //Getter and Setters avoided
}
public class Main{
        public static void main(String []args){
        Child child = new Child();
        //Adding values and creating xml using the Marshalling approach
        JAXBContext context = JAXBContext.newInstance(Child.class);
        Marshaller mar = context.createMarshaller();
        mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        mar.marshal(child, System.out);
     }
}

我期待的最终xml是:

<?xml version="1.0"?>
<child>
    <cit>Frankfurt</cit>
    <year>2021</year>
    <engine>Mercedes</engine>
    <brand>Ferari</brand>
    <build>Germany</build>
</child>

经过大量的试错方法,我终于做到了。发布答案,因为它可能对将来的其他人有用:

  1. Parent class 上添加 @XmlTransient 注释并删除 propOrder.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Parent")
@XmlTransient
public class Parent{
//All the parent element fields and other codes getter/setters
}
  1. 添加扩展 Parent
  2. Child class 中的所有字段
@XmlRootElement(name = "Car")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Child",propOrder={"city","year","engine","brand","build"})
public class Child{
}