The following section describes the use of default root elements in Object-XML descriptors.
You configure XML descriptors with a default root element so that the EclipseLink runtime knows the data source data type associated with the class the descriptor describes.
Note: The undefined document root element of a referenced object is ignored during marshalling with an any collection mapping and object mapping. |
This section describes what a default root element is and how EclipseLink uses it.
Consider the Customer
and Address
classes and their mappings, shown in Example 6-2.
Example 6-2 Customer and Address Classes
Class:
CustomerDefault Root:
customerAttributes and Mappings:
name:String Direct Mapping name/text() billingAddress:Address Composite Object Mapping to billing-address shippingAddress:Address Composite Object Mapping to shipping-addressClass:
AddressDefault Root:
addressAttributes and Mappings:
street:String Direct Mapping to street/text() city:String Direct Mapping to city/text()
These classes correspond to the XML schema, shown in Example 6-3.
Example 6-3 Customer and Address Schema
<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>
When an instance of the Customer
class is persisted to XML, the EclipseLink runtime performs the following:
Gets the default root element.
The Customer
class instance corresponds to the root of the XML document. The EclipseLink runtime uses the default root element specified on the descriptor (customer
) to start the XML document. EclipseLink then uses the mappings on the descriptor to marshal the object's attributes:
<customer> <name>…</name> </customer>
When the EclipseLink runtime encounters an object attribute such as billingAddress
, it checks the mapping associated with it to determine with what element (billing-address
) to continue:
<customer> <name>…</name> <billing-address/> </customer>
The EclipseLink runtime checks the mapping's reference descriptor (Address
) to determine what attributes to persist:
<customer> <name>…</name> <billing-address> <street>…</street> <city>…</city> </billing-address> </customer>