JAXB学习笔记

来源:互联网 发布:gta5捏脸数据女生初音 编辑:程序博客网 时间:2024/05/21 07:39

  • JAXB学习笔记
    • Preface
    • 名词解释
    • 正文
    • References

JAXB学习笔记

Preface

  • 因为到处都在说JAXB是个很有用的工具,而之前了解过一些远程方法调用(RMI,remote method invokation)过程中java 对象的序列化和反序列化过程。所谓好奇害死猫嘛,所以就这样开坑了。

名词解释

  • **JAXB: **java architecture for xml binding
  • Marshaling: 将java对象转化成XML的过程
  • UnMarshaling: 将XML转化成为java对象的过程

正文

JAXB解析那些被标签标记的类并通过这些信息将XML转化成为Java对象/将Java对象转化成为XML文档。在DOM Approach的方法中,先将XML文档转化成为内存中的节点树,对之后程序员的工作量要求较高。而JAXB避免了这样简单粗暴的转化,并且将XML中的节点和一个java类特定的部分绑定。每一个JAXB的实例都可以自由选择解析方式,比如DOM, SAX或者是Staxx。

JAXB Architecture - Overview
JAXB Architecture - Overview

部署和使用
在JDK 1.6及以上,JAXB的实例都是和JDK捆绑发行的,如果你的JDK版本较低,从javab.java.net下载.jar文件,并将jaxb-api.jar jaxb-Impl.jar放进你的工程类目录中。

JAXB依赖于一个XML Schema才能得到XML的结构,你可以写一个Java类用于定义XML的结构,并用标签标注,或者你可以使用各种各样的工具从XML Schema中直接得到JAXB对象。

本例关注于通过手动定义java类并使用* javax.xml.bind.annotation. **标注,来定义XML的结构。

JAXB 标注
我们需要定义一个对象来展示XML文件的结构。这个对象和在其中被标注定义的结构会在Marshaling和unMarshaling两个过程中都会用到。

Java 对象

package com.javahash.xml.jaxb;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElementpublic class Book {    String title;    int pages;    String isbn;    public String getTitle() {        return title;    }    @XmlElement    public void setTitle(String title) {        this.title = title;    }    public int getPages() {        return pages;    }    @XmlElement    public void setPages(int pages) {        this.pages = pages;    }    public String getIsbn() {        return isbn;    }    @XmlElement    public void setIsbn(String isbn) {        this.isbn = isbn;    }}

将对象转化成XML - Marshal

package com.javahash.xml.jaxb;import java.io.File;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaler;public class ObjectToXML {    /**     * Creates and XML from the Java Object     */    public static void main(String[] args) {        Book book = new Book();        book.setTitle("Lord of the Rings");        book.setIsbn("Abbbbbb112");        book.setPages(400);        try {            File file = new File("E:\file.xml");            JAXBContext jaxbContext = JAXBContext.newInstance(Book.class);            Marshaler jaxbMarshaler = jaxbContext.createMarshaler();            // output pretty printed            jaxbMarshaler.setProperty(Marshaler.JAXB_FORMATTED_OUTPUT, true);            // writing to a file            jaxbMarshaler.marshal(book, file);            // writing to console            jaxbMarshaler.marshal(book, System.out);        } catch (JAXBException e) {            e.printStackTrace();        }    }}

将XML转化成对象 - UnMarshal

package com.javahash.xml.jaxb;import java.io.File;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.UnMarshaler;public class XMLToObject {    /**     * @param args     */    public static void main(String[] args) {        try {            File file = new File("E:\file.xml");            JAXBContext jaxbContext = JAXBContext.newInstance(Book.class);            UnMarshaler jaxbUnMarshaler = jaxbContext.createUnMarshaler();            Book book = (Book) jaxbUnMarshaler.unmarshal(file);            System.out.println(book);          } catch (JAXBException e) {            e.printStackTrace();          }    }}

References

  • 原文链接:JAXB Example – Marshaling and UnMarshaling
  • 官方文档:Java Architecture for XML Binding Binding Compiler (xjc)
  • Oracle’s JAXB Tutorial
  • stackoverflow
0 0