Jump to: navigation, search

Difference between revisions of "EclipseLink/UserGuide/MOXy/Simple Values/Collections/XMLDirectCollectionMapping"

m (Replacing page with 'Please see http://www.eclipse.org/eclipselink/documentation/2.4/moxy/simple_values002.htm')
 
(30 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{EclipseLink_UserGuide
+
Please see http://www.eclipse.org/eclipselink/documentation/2.4/moxy/simple_values002.htm
|info=y
+
|api=y
+
|apis= * [http://www.eclipse.org/eclipselink/api/latest/javax/xml/bind/annotation/XmlAttribute.html XmlAttribute]
+
* [http://www.eclipse.org/eclipselink/api/latest/javax/xml/bind/annotation/XmlElement.html XmlElement]
+
* [http://www.eclipse.org/eclipselink/api/latest/javax/xml/bind/annotation/XmlValue.html XmlValue]
+
|toc=y
+
}}
+
=XML Direct Collection Mappings=
+
XML direct collection mappings map a collection of simple Java values directly to XML text nodes. You can use an XML direct collection mapping in the following scenarios:
+
* [[#Mapping to Text Nodes|Mapping to Text Nodes]]
+
* [[#Mapping to Text Nodes with a Grouping Element|Mapping to Text Nodes with a Grouping Element]]
+
 
+
 
+
 
+
==Mapping to Text Nodes==
+
 
+
Given the XML schema in this example, the figure below illustrates an XML direct collection mapping to elements in a corresponding XML document.
+
 
+
'''''Schema for XML Direct Collection Mapping to Text Nodes'''''
+
<source lang="xml">
+
<?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>
+
</source>
+
 
+
'''''XML Direct Collection Mapping to Text Nodes'''''
+
 
+
[[Image:dc.png|XML Direct Collection Mapping to Text Nodes]]<br><br>
+
 
+
The following example shows how to annotate your Java class to obtain this mapping with EclipseLink.  All that is needed is the standard JAXB <tt>@XmlElement</tt> annotation.
+
 
+
'''''Java for XML Direct Collection Mapping to Text Nodes'''''
+
<source lang="java">
+
@XmlRootElement
+
public class Customer {
+
  @XmlElement(name="email-address")
+
  public List<String> emailAddress;
+
}
+
</source>
+
 
+
The example below shows how to to define your mapping information in EclipseLink's OXM metadata format.
+
 
+
'''''OXM for XML Direct Collection Mapping to Text Nodes'''''
+
<source lang="xml">
+
...
+
<java-type name="Customer">
+
  <xml-root-element name="customer"/>
+
  <java-attributes>
+
      <xml-element java-attribute="emailAddresses" name="email-address"/>
+
  </java-attributes>
+
</java-type>
+
...
+
</source>
+
 
+
==Mapping to Text Nodes with a Grouping Element==
+
 
+
Given the XML schema in this example, the figure below illustrates an XML direct collection mapping to elements in a corresponding XML document, using a grouping element to contain the elements of the collection.
+
 
+
'''''Schema for XML Direct Collection Mapping to Text Nodes with a Grouping Element'''''
+
<source lang="xml">
+
<?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>
+
</source>
+
 
+
'''''XML Direct Collection Mapping to Text Nodes with a Grouping Element'''''
+
 
+
[[Image:dcge.png|XML Direct Collection Mapping to Text Nodes with a Grouping Element]]<br><br>
+
 
+
The following example shows how to annotate your Java class to obtain this mapping with EclipseLink.  All that is needed is the standard JAXB <tt>@XmlElement</tt> annotation.
+
 
+
'''''Java for XML Direct Collection Mapping to Text Nodes with a Grouping Element'''''
+
<source lang="java">
+
@XmlRootElement
+
public class Customer {
+
  @XmlElement(name="email-address")
+
  public List<String> emailAddress;
+
}
+
</source>
+
 
+
The example below shows how to to define your mapping information in EclipseLink's OXM metadata format.
+
 
+
'''''OXM for XML Direct Collection Mapping to Text Nodes with a Grouping Element'''''
+
<source lang="xml">
+
...
+
<java-type name="Customer">
+
  <xml-root-element name="customer"/>
+
  <java-attributes>
+
      <xml-element java-attribute="emailAddresses" name="email-address"/>
+
  </java-attributes>
+
</java-type>
+
...
+
</source>
+
 
+
 
+
==Mapping to a List Field with an XML Direct Mapping==
+
Given the XML schema in this exmaple, the [[#Figure 58-7|XMLDirect Mapping to a List Field]] figure illustrates an XML direct mapping to an <tt>xsd:list</tt> type in a corresponding XML document when you represent the list in your object model as a <tt>String</tt> of white space delimited tokens.
+
 
+
<span id="Example 58-14"></span>
+
'''''Schema for XML Direct Mapping to a List Field'''''
+
<source lang="xml">
+
<?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>
+
</source>
+
 
+
<span id="Figure 58-7"></span>
+
'''''XMLDirect Mapping to a List Field'''''
+
 
+
[[Image:dcxmstn.gif|XMLDirect Mapping to a List Field]]<br><br>
+
 
+
The example below shows how to annotate your Java class to obtain this mapping with EclipseLink.
+
 
+
<span id="Example 58-15"></span>
+
'''''Java for XML Direct Mapping to a List Field Node'''''
+
<source lang="java">
+
@XmlRootElement
+
public class Employee {
+
  @XmlList
+
  public List<String> tasks;
+
}
+
</source>
+
 
+
The example below shows how to to define your mapping information in EclipseLink's OXM metadata format.
+
 
+
<span id="Example 58-15-2"></span>
+
'''''OXM for XML Direct Mapping to a List Field Node'''''
+
<source lang="xml">
+
...
+
<java-type name="Employee">
+
  <xml-root-element name="employee"/>
+
  <java-attributes>
+
      <xml-element java-attribute="tasks" xml-path="tasks/text()" xml-list="true"/>
+
  </java-attributes>
+
</java-type>
+
...
+
</source>
+
 
+
{{tip||<tt>@XmlList</tt> can also be used in conjunction with <tt>@XmlAttribute</tt> and <tt>@XmlValue</tt>, as shown below.}}
+
 
+
'''''Java Annotations'''''
+
<source lang="java">
+
@XmlRootElement
+
public class Customer {
+
  @XmlAttribute
+
  @XmlList
+
  public List<Integer> ids;
+
}
+
</source>
+
 
+
<source lang="java">
+
@XmlRootElement(name="phone-numbers")
+
public class PhoneNumbers {
+
  @XmlValue
+
  @XmlList
+
  public List<String> numbers;
+
}
+
</source>
+
 
+
'''''EclipseLink OXM Metadata'''''
+
<source lang="java">
+
...
+
<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>
+
...
+
</source>
+
 
+
'''''Example XML Documents'''''
+
<source lang="xml">
+
<customer ids="726 1982 1989 2991"/>
+
</source>
+
 
+
<source lang="xml">
+
<phone-numbers>6132883982 6139828817 18882982298</phone-numbers>
+
</source>
+

Latest revision as of 10:17, 8 November 2012

Please see http://www.eclipse.org/eclipselink/documentation/2.4/moxy/simple_values002.htm