JAXBでJavaクラスからXML schema生成 - torutkの日記の続きです。
Measureクラスのフィールドに@XmlAttributeを指定し、XMLにmarshalした際、XMLのアトリビュートの順番を制御するには、エレメント同様@XmlTypeの属性propOrderを利用できます。
XMLのアトリビュートの場合、順番は制限されないので、XML文書上で自由な順番にすることがきます。しかし、JavaインスタンスからXMLに出力するときに、順番がちぐはぐだと都合が悪いことがあります(例:座標のXとYが逆になっていると、人がXML文書を修正する際、間違える率が高まる)。
@XmlType(propOrder={"temperature", "humidity", "windDirection", "windSpeed"}) public class Measure { @XmlAttribute private double temperature; @XmlAttribute private double humidity; @XmlAttribute private int windDirection; @XmlAttribute private int windSpeed; @XmlAttribute @XmlJavaTypeAdapter(XmlDateAdapter.class) private Calendar dateTime;
すると、
<measure dateTime="2011-10-01 22:00:00" temperature="21.5" humidity="55.0" windDirection="122" windSpeed="3"/>
のように順番が制御できます。
温度、湿度、風向、風速の順番に並べています。