Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/UserGuide/MOXy/Simple Values/Collections/XMLDirectCollectionMapping"
(→Mapping a Collection of XmlAttributes or XmlValues) |
|||
Line 38: | Line 38: | ||
<source lang="java"> | <source lang="java"> | ||
@XmlRootElement | @XmlRootElement | ||
+ | @XmlAccessorType(XmlAccessType.FIELD) | ||
public class Customer { | public class Customer { | ||
@XmlElement(name="email-address") | @XmlElement(name="email-address") | ||
private List<String> emailAddress; | private List<String> emailAddress; | ||
− | |||
− | |||
− | |||
... | ... | ||
} | } | ||
Line 89: | Line 87: | ||
<source lang="java"> | <source lang="java"> | ||
@XmlRootElement | @XmlRootElement | ||
+ | @XmlAccessorType(XmlAccessType.FIELD) | ||
public class Customer { | public class Customer { | ||
@XmlElement(name="email-address") | @XmlElement(name="email-address") | ||
Line 94: | Line 93: | ||
private List<String> emailAddresses; | private List<String> emailAddresses; | ||
− | |||
− | |||
− | |||
... | ... | ||
} | } | ||
Line 146: | Line 142: | ||
<source lang="java"> | <source lang="java"> | ||
@XmlRootElement | @XmlRootElement | ||
+ | @XmlAccessorType(XmlAccessType.FIELD) | ||
public class Employee { | public class Employee { | ||
@XmlList | @XmlList | ||
private List<String> tasks; | private List<String> tasks; | ||
− | |||
− | |||
− | |||
... | ... | ||
} | } | ||
Line 177: | Line 171: | ||
<source lang="java"> | <source lang="java"> | ||
@XmlRootElement | @XmlRootElement | ||
+ | @XmlAccessorType(XmlAccessType.FIELD) | ||
public class Customer { | public class Customer { | ||
@XmlAttribute | @XmlAttribute | ||
Line 182: | Line 177: | ||
private List<Integer> ids; | private List<Integer> ids; | ||
− | |||
− | |||
− | |||
... | ... | ||
} | } | ||
Line 191: | Line 183: | ||
<source lang="java"> | <source lang="java"> | ||
@XmlRootElement(name="phone-numbers") | @XmlRootElement(name="phone-numbers") | ||
+ | @XmlAccessorType(XmlAccessType.FIELD) | ||
public class PhoneNumbers { | public class PhoneNumbers { | ||
@XmlValue | @XmlValue | ||
Line 196: | Line 189: | ||
private List<String> numbers; | private List<String> numbers; | ||
− | |||
− | |||
− | |||
... | ... | ||
} | } | ||
Line 204: | Line 194: | ||
'''''EclipseLink OXM Metadata''''' | '''''EclipseLink OXM Metadata''''' | ||
− | <source lang=" | + | <source lang="xml"> |
... | ... | ||
<java-type name="Customer"> | <java-type name="Customer"> |
Revision as of 16:45, 5 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
Mapping Collections of Simple Values
This section demonstrates several ways to map a collection of simple Java values directly to XML text nodes.
Mapping to Text Nodes
Given the XML schema in this example, the figure below illustrates the mapping of a Java collection to elements in a corresponding XML document.
<?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:sequence> <xsd:element name="email-address" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </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 @XmlAccessorType(XmlAccessType.FIELD) public class Customer { @XmlElement(name="email-address") private List<String> emailAddress; ... }
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="emailAddresses" name="email-address"/> </java-attributes> </java-type> ...
Mapping to Text Nodes with a Grouping Element
Given the XML schema in this example, the figure below illustrates the mapping of a Java collection to elements in a corresponding XML document, using a grouping element to organize the elements of the collection.
<?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:sequence> <xsd:element name="email-address" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
The following example shows how to annotate your Java class to obtain this mapping with EclipseLink. We specify the grouping element with the @XmlElementWrapper annotation.
@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Customer { @XmlElement(name="email-address") @XmlElementWrapper(name="email-addresses") private List<String> emailAddresses; ... }
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="emailAddresses" name="email-address"> <xml-element-wrapper name="email-addresses"/> </xml-element> </java-attributes> </java-type> ...
Mapping to a List Element
Given the XML schema in this exmaple, the figure below illustrates a mapping to an xsd:list type in a corresponding XML document. Using this mapping, you can represent the collection of simple Java objects as a String of white space delimited tokens in XML. Here, the tasks list contains three entries: "Design", "Code" and "Test".
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="employee" type="employee-type"/> <xsd:complexType name="employee-type"> <xsd:sequence> <xsd:element name="tasks" type="tasks-type"/> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="tasks-type"> <xsd:list itemType="xsd:string"/> </xsd:simpleType> </xsd:schema>
The example below shows how to annotate your Java class to obtain this mapping with EclipseLink.
@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Employee { @XmlList private List<String> tasks; ... }
The example below shows how to to define your mapping information in EclipseLink's OXM metadata format.
... <java-type name="Employee"> <xml-root-element name="employee"/> <java-attributes> <xml-element java-attribute="tasks" xml-list="true"/> </java-attributes> </java-type> ...
Mapping a Collection of XmlAttributes or XmlValues
@XmlList can also be used in conjunction with @XmlAttribute or @XmlValue, as shown below. The collection will be represented as a space-separated string in the attribute.
Java Annotations
@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Customer { @XmlAttribute @XmlList private List<Integer> ids; ... }
@XmlRootElement(name="phone-numbers") @XmlAccessorType(XmlAccessType.FIELD) public class PhoneNumbers { @XmlValue @XmlList private List<String> numbers; ... }
EclipseLink OXM Metadata
... <java-type name="Customer"> <xml-root-element name="customer"/> <java-attributes> <xml-attribute java-attribute="ids" xml-list="true"/> </java-attributes> </java-type> ... ... <java-type name="PhoneNumbers"> <xml-root-element name="phone-numbers"/> <java-attributes> <xml-value java-attribute="numbers" xml-list="true"/> </java-attributes> </java-type> ...
Example XML Documents
<customer ids="726 1982 1989 2991"/>
<phone-numbers>6132883982 6139828817 18882982298</phone-numbers>
|
||
EclipseLink Home MOXy User Guide: Table of Contents, Search | ||
How to contribute to this guide... |