Jump to: navigation, search

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

Line 34: Line 34:
 
[[Image:dc.png|XML Direct Collection Mapping to Text Nodes]]<br><br>
 
[[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.
+
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.
  
 
<source lang="java">
 
<source lang="java">
 +
package example;
 +
 +
import javax.xml.bind.annotation.*;
 +
 
@XmlRootElement
 
@XmlRootElement
 
@XmlAccessorType(XmlAccessType.FIELD)
 
@XmlAccessorType(XmlAccessType.FIELD)
Line 83: Line 87:
 
[[Image:dcge.png|XML Direct Collection Mapping to Text Nodes with a Grouping Element]]<br><br>
 
[[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.  We specify the grouping element with the <tt>@XmlElementWrapper</tt> annotation.
+
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.
  
 
<source lang="java">
 
<source lang="java">
 +
package example;
 +
 +
import javax.xml.bind.annotation.*;
 +
 
@XmlRootElement
 
@XmlRootElement
 
@XmlAccessorType(XmlAccessType.FIELD)
 
@XmlAccessorType(XmlAccessType.FIELD)
Line 115: Line 123:
  
 
==Mapping to a List Element==
 
==Mapping to a List Element==
Given the XML schema in this exmaple, the figure below illustrates a mapping to an <tt>xsd:list</tt> type in a corresponding XML document.  Using this mapping, you can represent the collection of simple Java objects as a <tt>String</tt> of white space delimited tokens in XML.  Here, the <tt>tasks</tt> list contains three entries: "Design", "Code" and "Test".
+
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".
  
 
<source lang="xml">
 
<source lang="xml">
Line 141: Line 149:
  
 
<source lang="java">
 
<source lang="java">
 +
package example;
 +
 +
import javax.xml.bind.annotation.*;
 +
 
@XmlRootElement
 
@XmlRootElement
 
@XmlAccessorType(XmlAccessType.FIELD)
 
@XmlAccessorType(XmlAccessType.FIELD)
Line 166: Line 178:
 
==Mapping a Collection of XmlAttributes or XmlValues==
 
==Mapping a Collection of XmlAttributes or XmlValues==
  
<tt>@XmlList</tt> can also be used in conjunction with <tt>@XmlAttribute</tt> or <tt>@XmlValue</tt>, as shown below.  The collection will be represented as a space-separated string in the attribute.
+
'''@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'''''
 
'''''Java Annotations'''''
 
<source lang="java">
 
<source lang="java">
 +
package example;
 +
 +
import javax.xml.bind.annotation.*;
 +
 
@XmlRootElement
 
@XmlRootElement
 
@XmlAccessorType(XmlAccessType.FIELD)
 
@XmlAccessorType(XmlAccessType.FIELD)
Line 182: Line 198:
  
 
<source lang="java">
 
<source lang="java">
 +
package example;
 +
 +
import javax.xml.bind.annotation.*;
 +
 
@XmlRootElement(name="phone-numbers")
 
@XmlRootElement(name="phone-numbers")
 
@XmlAccessorType(XmlAccessType.FIELD)
 
@XmlAccessorType(XmlAccessType.FIELD)

Revision as of 11:40, 20 April 2011

EclipseLink MOXy

link="http://wiki.eclipse.org/EclipseLink"
EclipseLink
Website
Download
Community
Mailing ListForumsIRC
Bugzilla
Open
Help Wanted
Bug Day
Contribute
Browse Source

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>

XML Direct Collection Mapping to Text Nodes

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.

package example;
 
import javax.xml.bind.annotation.*;
 
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
   @XmlElement(name="email-address")
   private List<String> emailAddress;
 
   ...
}

The example below shows how 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>

XML Direct Collection Mapping to Text Nodes with a Grouping Element

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.

package example;
 
import javax.xml.bind.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 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>

XMLDirect Mapping to a List Field

The example below shows how to annotate your Java class to obtain this mapping with EclipseLink.

package example;
 
import javax.xml.bind.annotation.*;
 
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Employee {
   @XmlList
   private List<String> tasks;
 
   ...
}

The example below shows how 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

package example;
 
import javax.xml.bind.annotation.*;
 
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
   @XmlAttribute
   @XmlList
   private List<Integer> ids;
 
   ...
}
package example;
 
import javax.xml.bind.annotation.*;
 
@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-logo.gif
Version: 2.2.0
Other versions...