【J2EE技术大杂烩】JAXB最简单的示例

小阳说:本文介绍了JAXB的基本定义,常用的类、接口以及标记。并通过一个简单的示例,演示POJO与XML之间的转换操作。


1、JAXB简介

  JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地 结合XML数据和处理函数。

  JAXB 2.0是JDK 1.6的组成部分。JAXB 2.2.3是JDK 1.7的组成部分。

2、API介绍

 2.1 类和接口

  • JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
  • Marshaller接口,将Java对象序列化为XML数据。
  • Unmarshaller接口,将XML数据反序列化为Java对象。

 2.2 标记

  • @XmlType,将Java类或枚举类型映射到XML模式类型   
  • @XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标 注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。   
  • @XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。   
  • @XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。   
  • @XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。   
  • @XmlRootElement,将Java类或枚举类型映射到XML元素。   
  • @XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。   
  • @XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。

3、简单示例代码

  新建一个普通java工程(当前笔者的jdk版本为jdk6)。然后新建一个学生类(Student)和主函数类(JAXBExample)。

  不依赖任何外部类库哦  

   Student.java的代码如下:

package org.samuel.study.jaxb;

import java.util.Date;

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

@XmlRootElement
public class Student {
	
	private int id;
	
	private String name;
	
	private int age;
	
	private Date birthday;

	public int getId() {
		return id;
	}
	
	@XmlAttribute
	public void setId(int id) {
		this.id = id;
	}
	
	@XmlElement
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	@XmlElement
	public void setAge(int age) {
		this.age = age;
	}

	public Date getBirthday() {
		return birthday;
	}

	@XmlElement
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
}

   测试代码如下:

package org.samuel.study.jaxb;

import java.io.File;
import java.text.SimpleDateFormat;

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

public class JAXBExample {
	
	public static SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
	
	public static void main(String[] args) throws Exception {
		marshal();
		unmarshal();
	}
	
	public static void marshal() throws Exception {
		Student student = new Student();
		student.setId(1);
		student.setName("yangfeng");
		student.setAge(25);
		student.setBirthday(df.parse("19870322"));
		
		JAXBContext jaxbContext = JAXBContext.newInstance(Student.class);
		Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
		jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
                // 打印到控制台
		jaxbMarshaller.marshal(student, System.out);
                // 持久化到文件
		jaxbMarshaller.marshal(student, new File("student.xml"));
	}
	
	public static void unmarshal() throws Exception {
		JAXBContext jaxbContext = JAXBContext.newInstance(Student.class);
		Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
                // 从文件读取
		Student student = (Student) jaxbUnmarshaller.unmarshal(new File("student.xml"));
		System.out.println(student.getId());
		System.out.println(student.getName());
		System.out.println(student.getAge());
		System.out.println(df.format(student.getBirthday()));
	}
}

4、项目结构和控制台输出

  有图有真相哦。

yangfengby-JAXB示例项目结构

图1 项目结构

yangfengby-JAXB示例控制台输出

图2 控制台输出

5、后话

  本篇只是一个最简单的例子。JAXB为Java程序员在POJO与xml的转换上提供了极大的便利。

  JAXB有很多应用场景。例如客户端和服务器端的XML数据通信就可以使用JAXB。服务器端不再繁琐的使用DOM4J来组装XML文件,客户端也不需要繁杂的解析步骤。

  示例工程下载jaxb.jar

  参考文献

 

 

转载于:https://www.cnblogs.com/onliny/archive/2012/10/31/2747794.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值