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/Relationships/Privately Owned/One-to-One"
(→Working with Null Values) |
(→Working with Null Values) |
||
Line 119: | Line 119: | ||
==Working with Null Values== | ==Working with Null Values== | ||
− | Eclipselink offers several ways to configure its handling of null values in both Java and XML. For example, your XML may use <tt>xsi:nil</tt> to represent a null value (e.g. <tt><first-name xsi:nil="true"/></tt>), or it might simply use an empty element (e.g. <tt><first-name></first-name></tt>). On the Java side, | + | Eclipselink offers several ways to configure its handling of null values in both Java and XML. For example, your XML may use <tt>xsi:nil</tt> to represent a null value (e.g. <tt><first-name xsi:nil="true"/></tt>), or it might simply use an empty element (e.g. <tt><first-name></first-name></tt>). On the Java side, you may want to specify exactly how a null value should be written to XML (<tt>nil</tt> or empty node). You can even specify an "isSet" method, to differentiate between values that were explicitly set to null versus values which are null due to being unset. |
{{EclipseLink_MOXy | {{EclipseLink_MOXy |
Revision as of 15:21, 4 January 2011
EclipseLink MOXy
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Contents
Mapping One-to-One Relationships
This section demonstrates several ways to map a one-to-one relationship between objects.
Mapping to a Complex Type
Given the XML schema in this example, the figure below illustrates a one-to-one relationship between two complex types.
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="customer" type="customer-type"/> <xsd:complexType name="customer-type"> <xsd:element name="address" type="address-type"/> </xsd:complexType> <xsd:complexType name="phone-type"> <xsd:element name="area-code" type="xsd:int"/> <xsd:element name="number" type="xsd:int"/> <xsd:element name="extension" type="xsd:int"/> </xsd:complexType> </xsd:schema>
The following example shows how to annotate your Java class to obtain this mapping with EclipseLink. All that is needed is the standard JAXB @XmlElement annotation.
@XmlRootElement public class Customer { @XmlElement(name="phone-number") public PhoneNumber phoneNumber; } public class PhoneNumber { @XmlElement(name="area-code") public Integer areaCode; @XmlElement public Integer number; @XmlElement public Integer extension; }
The example below shows how to to define your mapping information in EclipseLink's OXM metadata format.
... <java-type name="Customer"> <xml-root-element name="customer"/> <java-attributes> <xml-element java-attribute="phoneNumber" name="phone-number" type="PhoneNumber"/> </java-attributes> </java-type> <java-type name="PhoneNumber"> <java-attributes> <xml-value java-attribute="areaCode" name="area-code" type="java.lang.Integer"/> <xml-value java-attribute="number" type="java.lang.Integer"/> <xml-value java-attribute="extension" type="java.lang.Integer"/> </java-attributes> </java-type> ...
"Self" Mappings
EclipseLink allows you to configure your one-to-one mapping such that the data from the target object will appear inside the source object's XML element. Using the example above, this means that the "PhoneNumber" information would appear directly under the "customer" element, and not wrapped in a "phone-number" element. This is referred to as a "self" mapping, and is achieved by setting the target object's XPath to "." (dot). The following example demonstrates a self mapping declared in annotations.
@XmlRootElement public class Customer { @XmlElement @XmlPath(".") public PhoneNumber phoneNumber; } public class PhoneNumber { ... }
The example below shows a self mapping defined on EclipseLink OXM metadata format.
... <java-type name="Customer"> <xml-root-element name="customer"/> <java-attributes> <xml-element java-attribute="phoneNumber" type="PhoneNumber" xml-path="."/> </java-attributes> </java-type> <java-type name="PhoneNumber"> ... </java-type> ...
Using a self mapping, the following XML will be produced:
<customer> <area-code>613</area-code> <number>2883000</number> <extension>1547</extension> </customer>
Working with Null Values
Eclipselink offers several ways to configure its handling of null values in both Java and XML. For example, your XML may use xsi:nil to represent a null value (e.g. <first-name xsi:nil="true"/>), or it might simply use an empty element (e.g. <first-name></first-name>). On the Java side, you may want to specify exactly how a null value should be written to XML (nil or empty node). You can even specify an "isSet" method, to differentiate between values that were explicitly set to null versus values which are null due to being unset.