Skip to main content

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.

Jump to: navigation, search

Difference between revisions of "EclipseLink/UserGuide/MOXy/Relationships/Collections and Maps"

m (@XmlElement)
m
Line 70: Line 70:
 
}
 
}
 
</source>
 
</source>
 +
  
 
==Default==
 
==Default==
Line 82: Line 83:
  
 
</source>
 
</source>
 +
  
 
==@XmlElement==
 
==@XmlElement==
Line 109: Line 111:
 
</customer>
 
</customer>
 
</source>
 
</source>
 +
  
 
== @XmlElementWrapper==
 
== @XmlElementWrapper==
 +
Use the '''@XmlElementWrapper''' annotation to add a grouping element to organize the collection:
  
Sometimes we want to add a grouping element to organize our collection data.  This is done using the @XmlElementWrapper annotation.
+
<source lang="java">
 
+
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
+
 
import java.util.*;
 
import java.util.*;
 
import javax.xml.bind.annotation.*;
 
import javax.xml.bind.annotation.*;
Line 140: Line 130:
 
}
 
}
  
The following is the corresponding XML output:
+
This will produce the following XML:
 
+
<source lang="xml">
1
+
2
+
3
+
4
+
5
+
6
+
+
 
<customer>
 
<customer>
 
     <email-addresses>
 
     <email-addresses>
Line 155: Line 138:
 
     </email-addresses>
 
     </email-addresses>
 
</customer>
 
</customer>
 +
</source>
  
@XmlList
 
  
We can also represent our collection data as space seperated text.  This is done using the @XmlList annotation.
+
==@XmlList==
 +
Use the '''@XmlList''' annotation to represent the collection as space separated text.   
  
1
+
<source lang="Java">
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
+
 
import java.util.*;
 
import java.util.*;
 
import javax.xml.bind.annotation.*;
 
import javax.xml.bind.annotation.*;
Line 183: Line 156:
 
   
 
   
 
}
 
}
 +
</source>
  
The following is the corresponding XML output:
+
This will produce the following XML:
 
+
<source lang="xml">
1
+
2
+
3
+
4
+
 
 
 
<customer>
 
<customer>
 
     <emailAddresses>janed@example.com jdoe@example.org</emailAddresses>
 
     <emailAddresses>janed@example.com jdoe@example.org</emailAddresses>
 
</customer>
 
</customer>
 
+
</source>
 +
 
  
@XmlList and @XmlAttribute
+
==@XmlList and @XmlAttribute==
  
 
Since @XmlList allows us to represent a collection in a single piece of text it is also compatible with an XML attribute.
 
Since @XmlList allows us to represent a collection in a single piece of text it is also compatible with an XML attribute.

Revision as of 13:56, 5 April 2011

EclipseLink MOXy

Eclipselink-logo.gif
EclipseLink
Website
Download
Community
Mailing ListForumsIRCmattermost
Issues
OpenHelp WantedBug Day
Contribute
Browse Source

Elug api package icon.png Key API

Collections

JAXB contains several annotations to represent collections in XML:


Java Model

To demonstrate the annotations, refer to the following model:

import java.util.*;
import javax.xml.bind.annotation.*;
 
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
 
    private List<String> emailAddresses;
 
    public Customer() {
        emailAddresses = new ArrayList<String>();
    }
 
    public List<String> getEmailAddresses() {
        return emailAddresses;
    }
 
    public void setEmailAddresses(List<String> emailAddresses) {
        this.emailAddresses = emailAddresses;
    }
 
}

By applying different JAXB annotations, you can produce different XML.


Demo Code

This sample code converts the Customer object to XML.

 
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
 
public class Demo {
 
    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Customer.class);
 
        Customer customer = new Customer();
        customer.getEmailAddresses().add("janed@example.com");
        customer.getEmailAddresses().add("jdoe@example.org");
 
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(customer, System.out);
    }
}


Default

By default, JAXB marshalls each item in the collection to an XML element:

 
<customer>
    <emailAddresses>janed@example.com</emailAddresses>
    <emailAddresses>jdoe@example.org</emailAddresses>
</customer>


@XmlElement

Use the @XmlElement to control the name of the XML element that a collection item is marshalled to:

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

This will produce the following XML:

 
<customer>
    <email-address>janed@example.com</email-address>
    <email-address>jdoe@example.org</email-address>
</customer>


@XmlElementWrapper

Use the @XmlElementWrapper annotation to add a grouping element to organize the collection:

 
import java.util.*;
import javax.xml.bind.annotation.*;
 
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
 
    @XmlElementWrapper(name="email-addresses")
    @XmlElement(name="email-address")
    private List<String> emailAddresses;
 
}
 
This will produce the following XML:
<source lang="xml">	
<customer>
    <email-addresses>
        <email-address>janed@example.com</email-address>
        <email-address>jdoe@example.org</email-address>
    </email-addresses>
</customer>


@XmlList

Use the @XmlList annotation to represent the collection as space separated text.

import java.util.*;
import javax.xml.bind.annotation.*;
 
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
 
    @XmlList
    private List<String> emailAddresses;
 
}

This will produce the following XML:

 
<customer>
    <emailAddresses>janed@example.com jdoe@example.org</emailAddresses>
</customer>


@XmlList and @XmlAttribute

Since @XmlList allows us to represent a collection in a single piece of text it is also compatible with an XML attribute.

1 2 3 4 5 6 7 8 9 10 11 12

import java.util.*; import javax.xml.bind.annotation.*;

@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Customer {

   @XmlList
   @XmlAttribute
   private List<String> emailAddresses;

}

The following is the corresponding XML output:

1 2

<customer

   emailAddresses="janed@example.com jdoe@example.org"/>

@XmlList and @XmlValue

Since @XmlList allows us to represent a collection in a single piece of text it is also compatible with a single text node.

1 2 3 4 5 6 7 8 9 10 11 12

import java.util.*; import javax.xml.bind.annotation.*;

@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Customer {

   @XmlList
   @XmlValue
   private List<String> emailAddresses;

}

The following is the corresponding XML output:

1

<customer>janed@example.com jdoe@example.org</customer>


Eclipselink-logo.gif
Version: 2.2.0 Draft
Other versions...

Back to the top