At least one of your mapped classes must have a default root element defined. This tells EclipseLink what the top-level root of your XML document will be. Consider the <tt>Customer</tt> and <tt>Address</tt> classes shown in this example:

+

−

+

−

[[Image:Defaultrootelement.png]]<br><br>

+

−

+

−

These classes correspond to the XML schema shown in this example. The schema contains a top-level element of type "<tt>customer-type</tt>", therefore our <tt>Customer</tt> class will need to have a default root element specified.

+

−

+

−

<source lang="xml">

+

−

<xsd:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

+

−

<xsd:complexType name="address-type">

+

−

<xsd:sequence>

+

−

<element name="street" type="xsd:string"/>

+

−

<element name="city" type="xsd:string"/>

+

−

</xsd:sequence>

+

−

</xsd:complexType>

+

−

+

−

<xsd:element name="customer" type="customer-type"/>

+

−

+

−

<xsd:complexType name="customer-type">

+

−

<xsd:sequence>

+

−

<xsd:element name="name" type="xsd:string"/>

+

−

<xsd:element name="billing-address" type="address-type"/>

+

−

<xsd:element name="shipping-address" type="address-type"/>

+

−

</xsd:sequence>

+

−

</xsd:complexType>

+

−

</xsd:schema>

+

−

</source>

+

−

+

−

The following example shows how to annotate your Java class to specify a default root element. All that is needed is the standard JAXB <tt>@XmlRootElement</tt> annotation.

When an instance of the <tt>Customer</tt> class is persisted to XML, the EclipseLink runtime performs the following:

+

−

+

−

# Gets the default root element. The <tt>Customer</tt> class instance corresponds to the root of the XML document. The EclipseLink runtime uses the default root element (<tt>customer</tt>) specified in either annotations or OXM to start the XML document. EclipseLink then uses the mappings on the class to marshal the object's attributes.

+

−

<source lang="xml">

+

−

<customer>

+

−

<name>...</name>

+

−

</customer>

+

−

# When the EclipseLink runtime encounters an object attribute such as <tt>billingAddress</tt>, it checks the mapping associated with it to determine with what element (<tt>billing-address</tt>) to continue.

+

−

<source lang="xml">

+

−

<customer>

+

−

<name>...</name>

+

−

<billing-address/>

+

−

</customer>

+

−

</source>

+

−

# The EclipseLink runtime checks the mapping's reference descriptor (<tt>Address</tt>) to determine what attributes to persist:

+

−

<source lang="xml">

+

−

<customer>

+

−

<name>...</name>

+

−

<billing-address>

+

−

<street>...</street>

+

−

<city>...</city>

+

−

</billing-address>

+

−

</customer>

+

−

</source>

+

−

+

−

{{EclipseLink_Note

+

−

|note=The undefined document root element of a referenced object is ignored during marshalling with an any collection mapping and object mapping.

+

−

}}

+

−

+

−

+

−

+

−

{{EclipseLink_MOXy

+

−

|previous=[[EclipseLink/UserGuide/MOXy/Type Level/Mapping to a Type or Element|Mapping to a Type or Element]]