Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/UserGuide/MOXy/Type Level/Mapping to a Type or Element/Default Root Element"
Line 67: | Line 67: | ||
When an instance of the <tt>Customer</tt> class is persisted to XML, the EclipseLink runtime performs the following: | 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. | + | # 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"> |
− | <source lang="xml"> | + | |
<customer> | <customer> | ||
<name>...</name> | <name>...</name> | ||
</customer> | </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. | + | # 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"> |
− | <source lang="xml"> | + | |
<customer> | <customer> | ||
<name>...</name> | <name>...</name> | ||
Line 79: | Line 77: | ||
</customer> | </customer> | ||
</source> | </source> | ||
− | # The EclipseLink runtime checks the mapping's reference descriptor (<tt>Address</tt>) to determine what attributes to persist | + | # The EclipseLink runtime checks the mapping's reference descriptor (<tt>Address</tt>) to determine what attributes to persist.<source lang="xml"> |
− | <source lang="xml"> | + | |
<customer> | <customer> | ||
<name>...</name> | <name>...</name> |
Revision as of 15:46, 6 January 2011
EclipseLink MOXy
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Key API
Contents
Default Root Element
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 Customer and Address classes shown in this example:
These classes correspond to the XML schema shown in this example. The schema contains a top-level element of type "customer-type", therefore our Customer class will need to have a default root element specified.
<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>
The following example shows how to annotate your Java class to specify a default root element. All that is needed is the standard JAXB @XmlRootElement annotation.
@XmlRootElement public class Customer { private String name; private Address billingAddress; private Address shippingAddress; ... }
The example below shows how specify a default root element in EclipseLink's OXM metadata format.
... <java-type name="Customer"> <xml-root-element name="customer"/> <java-attributes> <xml-element java-attribute="name"/> <xml-element java-attribute="billingAddress" name="billing-address"/> <xml-element java-attribute="shippingAddress" name="shipping-address"/> </java-attributes> </java-type> ...
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 (customer) 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.
<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>- 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>Note: The undefined document root element of a referenced object is ignored during marshalling with an any collection mapping and object mapping.