JAXB:Java Architecture for XML Binding
是一个业界的标准,是一项可以根据XML Schema产生java类的技术.该过程中jaxb也提供了讲xml实例文档反向生成java对象方法,并能讲java对象书的内容重新写到xml实例文档中. 从另一方面来讲,jaxb提供了快速而简单的方法将xml模式绑定到java表示,使得java开发者在java应用程序中能方便的结合xml数据和处理函数
@XmlRootElement
public class Student {
private Integer id;
private String name;
public Student() {
super();
}
public Student(Integer id, String name) {
super();
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
@XmlElement
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
jdk1.7之前bean和xml转换的方式(解组和编组),手动得到各种对象,设置各种参数
public class JAXBTest {
public static void main(String[] args) {
generateXml();
generateBean();
}
// bean转为xml;编组方法
public static void generateXml() {
Student stu = new Student(10, "小明");
File f = new File("D:/cheng/zz.xml");
JAXBContext jc;
try {
// 根据Student生成上下文对象
jc = JAXBContext.newInstance(stu.getClass());
// 从上下文中获取Marshller对象;作用讲bean编组(转换)xml
Marshaller ma = jc.createMarshaller();
// 生成xml做的一些配置
// 格式输出,按照标签自动换行,否则一行输出
ma.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 设置编码,默认为utf-8
ma.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
// 是否省略头信息,默认是不省略(默认false)
ma.setProperty(Marshaller.JAXB_FRAGMENT, false);
// 转换,讲p转换为文件file
ma.marshal(stu, f);
System.out.println(f);
} catch (JAXBException e) {
e.printStackTrace();
}
}
// xml转了bean;解组方法
public static void generateBean() {
File f = new File("D:/cheng/zz.xml");
JAXBContext jc;
try {
jc = JAXBContext.newInstance(Student.class);// 根据要生成的java类,得到上下文
Unmarshaller uma = jc.createUnmarshaller();// 根据上下文得到操作对象
Student stu = (Student) uma.unmarshal(f);//解组; 将xml文件转为java对象
System.out.println(stu);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
jdk1.7开始,对解组和编组进行更简单的封装;直接通过JAXB静态调用相应的根据方法就行了;如果实际项目中要进行个性化设置,才需要自己创建JAXBContext实例
//jdk1.7开始,编组方法;bean转为xml
public static void generateXml1() {
Student stu = new Student(20, "小刚");
File f=new File("D:/cheng/zz.xml");
JAXB.marshal(stu, f);
System.out.println(f.toString());
}
//jdk1.7开始,解组组方法;xml转为bean
public static void generateBean1() {
File f=new File("D:/cheng/zz.xml");
Student stu=JAXB.unmarshal(f, Student.class);
System.out.println(stu);
}