JAXB 和属性排序

新手上路,请多包涵

我希望我的 Java 类的序列化 XML 输出符合 Java 类中属性的顺序。

似乎 JAXB 按字母顺序排序。

我可以通过使用 @XmlTypepropOrder 并指定所有属性来覆盖它,但我有一个包含许多属性的类,这些属性尚未最终确定。

我读到指定一个空的 propOrder 会做到这一点,但事实并非如此。

我的示例类:

 package test;

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

@XmlRootElement
//@XmlType(propOrder={"company", "scheme", "agreementNumber"})
@XmlType(propOrder={}) // makes no difference - still alphabetical in XML
public class CustomerPlan2 {

    private String company;
    private String scheme;
    private String agreementNumber;

    @XmlElement(name="Company")
    public String getCompany() {
        return company;
    }
    public void setCompany(String company) {
        this.company = company;
    }

    @XmlElement(name="Scheme")
    public String getScheme() {
        return scheme;
    }
    public void setScheme(String scheme) {
        this.scheme = scheme;
    }

    @XmlElement(name="AgreementNumber")
    public String getAgreementNumber() {
        return agreementNumber;
    }
    public void setAgreementNumber(String agreementNumber) {
        this.agreementNumber = agreementNumber;
    }
}

我的序列化代码:

     CustomerPlan2 cp2 = new CustomerPlan2();

    cp2.setCompany("company");
    cp2.setScheme("scheme");
    cp2.setAgreementNumber("agreementnumber");
    JAXBContext context = JAXBContext.newInstance(CustomerPlan2.class);
    Marshaller marshaller = context.createMarshaller();

    marshaller.marshal(cp2, new FileWriter("C:\\temp\\out.xml"));

输出:

     <customerPlan2>
      <AgreementNumber>agreementnumber</AgreementNumber>
      <Company>company</Company>
      <Scheme>scheme</Scheme>
    </customerPlan2>

我希望我的输出是(作为我班级的属性顺序):

     <customerPlan2>
      <Company>company</Company>
      <Scheme>scheme</Scheme>
      <AgreementNumber>agreementnumber</AgreementNumber>
    </customerPlan2>

感谢您对此的任何帮助。

原文由 andy hallam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 827
1 个回答

可以使用:

 @XmlType (propOrder={"prop1","prop2",..."propN"})

只需像这样取消注释代码:

 //@XmlType(propOrder={"company", "scheme", "agreementNumber"})

这是正确的用法。

原文由 VIVEK PANDIAN S 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题