• 【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

      参考文献

  • 相关阅读:
    Android_学习系列(33)--App应用之提交到各大市场渠道
    Android_TextView使用Spanable
    6 种CSS设置居中的方法
    如何设置Grunt
    C#中的Collection 3
    C#中的Collection 2
    C#中的Collection 1
    网页上的JS call Unity3d里的function——SendMessage
    关于WebPlayer Sandbox的小节
    完整Deploy WebPlayer的Config
  • 原文地址:https://www.cnblogs.com/onliny/p/2747794.html
Copyright © 2020-2023  润新知