JAXB注释

我需要一些JAXB Annotations的帮助,我找不到好的doc帮助我解决这个问题。

我有一个我想编组成XML的类。 我的class级看起来像这样:

@XmlRootElement(name="car") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { "vid", "make", "model", "recalls", "engSpec" }) public class Car { @XmlElement(name="vid", required=true) private String vid; @XmlElement(name="make", required=true) private String make; @XmlElement(name="model", required=true) private String model; @XmlElement(name="recalls", required=true) private ArrayList recalls; @XmlElement(name="engSpec", required=true) private EngSpec engSpec; ... 

召回课看起来像这样:

 @XmlRootElement(name = "recall") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { "type", "date" }) public class Recall { @XmlElement(name="type", required=true) private String type; @XmlElement(name="date", required=true) private String date; ... 

所以它产生了这个XML输出:

  vid make model  Recall1 01/01/11   Recall2 01/01/11   200HP size   

但是我希望ArrayList以不同的方式显示,如下所示:

  vid make model   Recall1 01/01/11   Recall2 01/01/11    200HP size   

知道我怎么能这样做吗? 我认为问题出在我的架构上,但是我将它用于编组:

 JAXBContext jc = JAXBContext.newInstance(Car.class); Marshaller marsh = jc.createMarshaller(); marsh.marshal(car, out); 

任何想法如何解决这一问题? 谢谢!

尝试这个:

 @XmlRootElement(name="car") ... public class Car { ... @XmlElementWrapper(name="recalls") // this name=... can be omitted, as it // is the same as the field name @XmlElement(name="recall") private ArrayList recalls; } 

从文档 :

XmlElementWrapper :围绕XML表示生成包装元素。 这主要用于生成围绕集合的包装XML元素。