按Schema xml的顺序将Java对象转换为XML

时间:2015-07-23 13:53:27

标签: java xml xsd jaxb

我有一个java对象

@XmlRootElement
public class Customer {

    private String name;
    private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();
    private String id;
    private Date startDate;
    private Date endDate;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @XmlElement(name = "phone-number")
    public List<PhoneNumber> getPhoneNumbers() {
        return phoneNumbers;
    }
    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
        this.phoneNumbers = phoneNumbers;
    }
}

我想定义一个架构xml(customer.xsd),它应该用于在生成xml时设置标签的顺序, 与对象成员顺序相比,生成的Object to xml应按以下顺序排列。

<customer>
    <startDate></startDate>
    <endDate></endDate>
    <name></name>
    <id></id>
    <phoneNumbers></phoneNumbers> 
</customer>

编组和解组编码都应该基于相同的模式xml。

有人可以帮助我如何创建这个模式以及如何实现我的排序吗?

1 个答案:

答案 0 :(得分:0)

您有两种选择:

  • 在Java对象中,您可以定义@XmlType(propOrder={<order of the elements>}) 有关详细信息,请参阅here
  • 第二种方法(使用xsd),你可以像这样定义一个xsd:
  

      

<xsd:element name="Customer">
  <xsd:complexType >
       <xsd:sequence>
          <xsd:element name="name" type="xsd:string" />
          <xsd:element name="id" type="xsd:string" />
          <xsd:element name="startDate" type="xsd:string" />
          <xsd:element name="endDate" type="xsd:int" />
          <xsd:element name="phoneNumbers" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
  </xsd:complexType>
</xsd:element>

在XSD中,您可以订购<xsd:sequence>内的元素 请注意,我没有尝试使用此XSD作为此示例,我添加它作为参考。