我希望Java类的序列化XML输出遵循Java类中属性的顺序。
似乎JAXB是按字母顺序排序的。
我可以通过使用带有propOrder的@XmlType
并指定所有属性来覆盖它,但是我有一个具有许多属性的类,这些属性还没有完成。
我读到指定一个空的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>
谢谢你在这方面的帮助。
发布于 2011-06-08 15:21:58
可以使用:
@XmlType (propOrder={"prop1","prop2",..."propN"})
只需像这样取消对代码的注释:
//@XmlType(propOrder={"company", "scheme", "agreementNumber"})
这是正确的用法。
发布于 2011-03-26 00:34:14
不能保证Java反射返回字段/属性列表的顺序。这就是JAXB实现不使用它来确定元素顺序的原因。
缺省情况下,JAXB提供no guaranteed ordering。但是,大多数(如果不是所有的JAXB实现)都使用字母顺序,因为它是确定性的。要保证这种排序,您必须按如下方式注释您的类:
@XmlAccessorOrder(XmlAccessOrder.ALPHABETICAL)
public class Foo {
...
}
发布于 2014-02-17 19:57:01
@XmlType(propOrder={"company", "scheme", "agreementNumber"})
这是正确的,但是你试过这个吗?
@XmlType(propOrder={"Company", "Scheme", "AgreementNumber"})
https://stackoverflow.com/questions/5435138
复制相似问题