In this example you’ll learn how to use the JAXB @XmlElementWrapper
annotation. This annotation can be used to generate a wrapper element around an XML element representation. When no name defined, the @XmlElementWrapper
annotation uses the property name as the wrapper element name. Let’s see the code snippet below.
Here is the code snippet for marshaling the Record
object into an XML document. Before the marshalling take place, we create an object of Record
and adds a some Track
into it.
package org.kodejava.xml;
import org.kodejava.xml.support.Track;
import org.kodejava.xml.support.Record;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class JAXBElementWrapper {
public static void main(String[] args) {
Track track1 = new Track();
track1.setId(1);
track1.setTitle("Love Me Do");
Track track2 = new Track();
track2.setId(2);
track2.setTitle("From Me To You");
Track track3 = new Track();
track3.setId(3);
track3.setTitle("She Loves You");
Record record = new Record();
record.setId(1);
record.setTitle("The Beatles 1");
record.getTracks().add(track1);
record.getTracks().add(track2);
record.getTracks().add(track3);
try {
JAXBContext context = JAXBContext.newInstance(Record.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(record, System.out);
try (Writer writer = new FileWriter("Record.xml")) {
marshaller.marshal(record, writer);
}
} catch (JAXBException | IOException e) {
e.printStackTrace();
}
}
}
package org.kodejava.xml.support;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.List;
@XmlRootElement
public class Record {
private Integer id;
private String title;
private String artist;
private String genre;
private Integer year;
private List<Track> tracks = new ArrayList<>();
public Record() {
}
@XmlAttribute
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@XmlElement
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public Integer getYear() {
return year;
}
public void setYear(Integer year) {
this.year = year;
}
@XmlElementWrapper(name = "trackList")
@XmlElement(name = "track")
public List<Track> getTracks() {
return tracks;
}
public void setTracks(List<Track> tracks) {
this.tracks = tracks;
}
@Override
public String toString() {
return "Record{" +
"title='" + title + "'\n" +
", artist='" + artist + "'\n" +
", genre='" + genre + "'\n" +
", year=" + year +
'}';
}
}
package org.kodejava.xml.support;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Track {
private Integer id;
private String title;
public Track() {
}
public Integer getId() {
return id;
}
@XmlAttribute
public void setId(Integer id) {
this.id = id;
}
@XmlElement
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Track{" +
"id=" + id +
", title='" + title + '\'' +
'}';
}
}
The above program will generated the following XML document.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<record id="1">
<title>The Beatles 1</title>
<trackList>
<track id="1">
<title>Love Me Do</title>
</track>
<track id="2">
<title>From Me To You</title>
</track>
<track id="3">
<title>She Loves You</title>
</track>
</trackList>
</record>
Maven Dependencies
<dependencies>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-ri</artifactId>
<version>2.3.5</version>
<type>pom</type>
</dependency>
</dependencies>
Latest posts by Wayan (see all)
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024
Hi,
What is the structure of the Track class defined in the above example
Hi, sorry to confused you. Take a look at the following example: https://kodejava.org/how-to-convert-object-to-xml-using-jaxb/