The basic annotation for a field that's intended to be an element is XmlElement
. It permits you to define the XML element name, the namespace, whether it is optional or nillable, a default value and the Java class. Here are two annotated fields, and below is the corresponding schema snippet.
@XmlElement(name = "Preamble", required = true)
protected PreambleType preamble;
@XmlElement(name = "Workplace", required = true)
protected List<SysWorkplaceType> workplace;
<xsd:sequence>
<xsd:element name="Preamble" type="com:PreambleType"/>
<xsd:element name="Workplace" type="SysWorkplaceType" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
If a field has some collection type, more than one @XmlElement
may have to be associated with this field. This requires that these annotations are assembled in a XmlElements
(not the plural "s") annotation that merely acts as a container. In the class definition below, the field entryOrChoiceOrCascade
is a collection composed from objects of three different classes.
@XmlType(name = "MenuType")
public class MenuType extends ItemType { @XmlElements({
@XmlElement(name = "Item", type = ItemType.class),
@XmlElement(name = "CheckBox", type = CheckBoxType.class),
@XmlElement(name = "Menu", type = MenuType.class)
})
protected List entryList;
}
As a bonus you may avoid the complicated name for the list element that JAXB concocts from the first three possibles.