The following is the default binding of an optional (minOccurs="0") and nillable(nillable="true") element:
//-- XML schema fragment
<xs:element name="person" type="Person"
<xs:complexType name="Person">
<xs:sequence>
<xs:element name="name" type="xs:string"
nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
...
// Binding
public class Person {
JAXBElement<String> getName() {...};
public void setName(JAXBElement<String> value) {...}
}
Since the XML element name is both optional and nillable, it can be represented in an XML instance in one of following ways:
<!-- Absence of element name-->
<person>
<-- element name is absent -->
</person>
<!-- Presence of an element name -->
<person>
<name xsi:nil="true"/>
</person>
The JAXBElement<String> type roundtrips the XML representation of name element across an unmarshal/marshal operation.