JAXB学习笔记

5 篇文章 0 订阅
3 篇文章 0 订阅

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;
@XmlRootElement
public 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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值