e-Zest members share technology ideas to foster digital transformation.

Unmarshalling XML into List of List in JAXB

Written by Madhura Oak | Sep 24, 2013 2:28:03 PM

At times you would need to unmarshal XML in List<List<T>> using JAXB. The XML in Listing 1 has multiple <SkillSet> elements. Each <SkillSet> element has multiple <Skill> elements. This XML can be unmarshalled in a List<List<String>> where each <SkillSet> would represent an element in the outer list and each <Skill> represents an element in the inner List.

<SkillSets>
	<SkillSet>
		<Skill>Java</Skill>
		<Skill>XML</Skill>
		<Skill>UML</Skill>
	</SkillSet>
	<SkillSet>
		<Skill>Java</Skill>
		<Skill>Database Design</Skill>
	</SkillSet>
</SkillSets>

Listing 1. A sample XML

The Java classes used in this example are given below in Listing 2 and 3.

@XmlRootElement(name="SkillSets")
public class SkillSets {
	private List<SkillSet> skills = new ArrayList<SkillSet>();

	@XmlElement(name="SkillSet")
	public List<SkillSet> getSkills() {
		return skills;
	}

	public void setSkills(List<SkillSet> skills) {
		this.skills = skills;
	}
}

Listing 2. The SkillSets class

public class SkillSet {
	private List<String> skills = new ArrayList<String>();

	@XmlElement(name="Skill")
	public List<String> getSkills() {
		return skills;
	}

	public void setSkills(List<String> skills) {
		this.skills = skills;
	}
}
}

Listing 3. The SkillSet class

The code in Listing 4 is used for unmarshalling.

JAXBContext context = JAXBContext.newInstance(SkillSets.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
//use appropriate argument in unmarshal method
SkillSets skillsets = (SkillSets)unmarshaller.unmarshal(...);

Listing 4. Unmarshalling the XML

The code in Listing 5 can be used to create a List<List>.

List<List<String>> skillsetsList = new ArrayList<List<String>>();
for(SkillSet skillset : skillsets.getSkills()) {
	List<String> skills = new ArrayList<String>();
	skillsetsList.add(skills);
	skills.addAll(skillset.getSkills());
}
System.out.println(skillsetsList);
//prints [[Java, XML, UML], [Java, Database Design]]

Listing 5. Creating List<List>