参考:
https://www.cnblogs.com/doudouxiaoye/p/5693441.html
https://linbulu.iteye.com/blog/2295919
代码:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
public class JAXBDemo {
public static void main(String[] args) {
try {
JAXBContext context = JAXBContext.newInstance(Department.class, Staff.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
String xmlObj = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
marshaller.marshal(getSimpleDepartment(), baos);
xmlObj = new String(baos.toByteArray());
System.out.println(xmlObj);
baos.close();
ByteArrayInputStream is = new ByteArrayInputStream(xmlObj.getBytes());
Unmarshaller unmarshaller = context.createUnmarshaller();
Department department = (Department) unmarshaller.unmarshal(is);
System.out.println(department);
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static Department getSimpleDepartment() {
List<Staff> staffs = new ArrayList<>();
Staff stf = new Staff();
stf.setName("周杰伦");
stf.setAge(30);
stf.setSmoker(false);
staffs.add(stf);
stf.setName("周笔畅");
stf.setAge(28);
stf.setSmoker(false);
staffs.add(stf);
stf.setName("周星驰");
stf.setAge(40);
stf.setSmoker(true);
staffs.add(stf);
Department dept = new Department();
dept.setName("娱乐圈");
dept.setStaffs(staffs);
return dept;
}
}
@XmlRootElement(name = "department")
class Department {
private String name;
private List<Staff> staffs;
public String getName() {
return name;
}
@XmlAttribute
public void setName(String name) {
this.name = name;
}
public List<Staff> getStaffs() {
return staffs;
}
@XmlElement(name = "staff")
public void setStaffs(List<Staff> staffs) {
this.staffs = staffs;
}
@Override
public String toString() {
return "Department [name=" + name + ", staffs=" + staffs + "]";
}
}
@XmlRootElement(name = "staff")
class Staff {
private String name;
private int age;
private boolean smoker;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
@XmlElement
public void setAge(int age) {
this.age = age;
}
public boolean isSmoker() {
return smoker;
}
@XmlAttribute
public void setSmoker(boolean smoker) {
this.smoker = smoker;
}
@Override
public String toString() {
return "Staff [name=" + name + ", age=" + age + ", smoker=" + smoker + "]";
}
}
加入JDK7特性,try-with-resource,catch 多异常
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
public class JAXBDemo {
public static void main(String[] args) {
try {
JAXBContext context = JAXBContext.newInstance(Department.class, Staff.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化
String xmlObj = null;
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
marshaller.marshal(getSimpleDepartment(), baos);
xmlObj = new String(baos.toByteArray()); // 生成XML字符串
System.out.println(xmlObj);
}
try (ByteArrayInputStream is = new ByteArrayInputStream(xmlObj.getBytes())) {
Unmarshaller unmarshaller = context.createUnmarshaller();
Department department = (Department) unmarshaller.unmarshal(is);
System.out.println(department);
}
} catch (JAXBException | IOException e) {
e.printStackTrace();
}
}
/**
* 生成一个简单的Department对象
*
* @return
*/
private static Department getSimpleDepartment() {
List<Staff> staffs = new ArrayList<>();
Staff stf = new Staff();
stf.setName("周杰伦");
stf.setAge(30);
stf.setSmoker(false);
staffs.add(stf);
stf.setName("周笔畅");
stf.setAge(28);
stf.setSmoker(false);
staffs.add(stf);
stf.setName("周星驰");
stf.setAge(40);
stf.setSmoker(true);
staffs.add(stf);
Department dept = new Department();
dept.setName("娱乐圈");
dept.setStaffs(staffs);
return dept;
}
}
@XmlRootElement(name = "department")
class Department {
private String name;
private List<Staff> staffs;
public String getName() {
return name;
}
@XmlAttribute
public void setName(String name) {
this.name = name;
}
public List<Staff> getStaffs() {
return staffs;
}
@XmlElement(name = "staff")
public void setStaffs(List<Staff> staffs) {
this.staffs = staffs;
}
@Override
public String toString() {
return "Department [name=" + name + ", staffs=" + staffs + "]";
}
}
@XmlRootElement(name = "staff")
class Staff {
private String name;
private int age;
private boolean smoker;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
@XmlElement
public void setAge(int age) {
this.age = age;
}
public boolean isSmoker() {
return smoker;
}
@XmlAttribute
public void setSmoker(boolean smoker) {
this.smoker = smoker;
}
@Override
public String toString() {
return "Staff [name=" + name + ", age=" + age + ", smoker=" + smoker + "]";
}
}