Thursday, February 14, 2013

XML - Marshaller and Unmarshaller a list

I have this xml file, named sample.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<group>
 <name> a group </name>
 <user>
  <name> user 1</name>
  <password> pass 1</password>
 </user>
 <user>
  <name> user 2</name>
  <password> pass 2</password>
 </user>
</group>

To bind this xml to an object, we create 2 classes:
1. Group.java
package com.lapth82.jaxb.bean;

import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "group")
public class Group {

 private String groupName;
 
 private List lstUser;

 @XmlElement(name = "user")
 public List getLstUser() {
  return lstUser;
 }

 public void setLstUser(List lstUser) {
  this.lstUser = lstUser;
 }

 @XmlElement(name = "name")
 public String getGroupName() {
  return groupName;
 }

 public void setGroupName(String groupName) {
  this.groupName = groupName;
 }
}
2. User.java
package com.lapth82.jaxb.bean;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "user")
public class User {

 private String userName;
 
 private String password;

 @XmlElement(name = "name")
 public String getUserName() {
  return userName;
 }

 public void setUserName(String userName) {
  this.userName = userName;
 }

 @XmlElement(name = "password")
 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }
}

Write a short code to test:
package com.lapth82.jaxb.test;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import com.lapth82.jaxb.bean.Group;

public class TestJAXB {

 public static void main(String[] args) throws Exception {
  JAXBContext jc = JAXBContext.newInstance(Group.class);
  
  Unmarshaller unMarshaller = jc.createUnmarshaller();
  Group group = (Group) unMarshaller.unmarshal(new File("xml/sample.xml"));
  
  group.getLstUser().get(1).setUserName("My Name");
  group.getLstUser().get(1).setPassword("My password");
  
  Marshaller marshaller = jc.createMarshaller();
  
  marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
  
  marshaller.marshal(group, System.out);
 }
}

The result:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<group>
    <name> a group </name>
    <user>
        <password> pass 1</password>
        <name> user 1</name>
    </user>
    <user>
        <password>My password</password>
        <name>My Name</name>
    </user>
</group>

For the demonstration, please download Source code from my repository on Github

No comments:

Post a Comment