Java JAXB示例
在本文中,我们将向您展示如何使用JAXB API在Java对象与XML之间进行转换。
JAXB
用于XML绑定的Java体系结构(JAXB)提供了一种快速便捷的方法来绑定XML模式和Java表示,从而使Java开发人员可以轻松地将XML数据和处理功能合并到Java应用程序中。作为此过程的一部分,JAXB提供了以下方法:将XML实例文档解组(读取)到Java内容树中,然后将Java内容树编组(写入)到XML实例文档中。JAXB还提供了一种从Java对象生成XML模式的方法。

编组(Marshalling) 是将Java对象转换为XML文档的过程。 
解组(Unmarshalling ) 是将XML文档读入Java对象的过程。

在Java 9中,JAXB已移至单独的模块 java.xml中。在 Java 9 和 Java 10中, 我们需要使用 --add-modules = java.xml.bind 选项。在Java 11中,JAXB已从JDK中删除,我们需要将其作为单独的库添加到项目中。
JAXB绑定过程
下图显示了JAXB绑定过程中发生的情况。
 
 
 
 
JAXB数据绑定过程中的一般步骤是:
•    生成类: XML模式用作JAXB绑定编译器的输入,以基于该模式生成JAXB类。
•    编译类:必须编译所有生成的类,源文件和应用程序代码。
•    解组:根据源模式中的约束编写的XML文档由JAXB绑定框架解组。注意,JAXB还支持从文件和文档以外的源(例如DOM节点,字符串缓冲区,SAX源等)解组XML数据。
•    生成内容树:解组过程生成从生成的JAXB类实例化的数据对象的内容树;该内容树表示源XML文档的结构和内容。
•    验证(可选):编组过程包括在生成内容树之前验证源XML文档。请注意,如果您在步骤6中修改了内容树,则还可以使用JAXB Validate操作来验证更改,然后再将内容编组回XML文档。
•    处理内容:客户端应用程序可以使用绑定编译器生成的接口来修改Java内容树表示的XML数据。
•    编组:将处理后的内容树编组到一个或多个XML输出文档中。可以在编组之前验证内容。
Java JAXB示例
让我们 使用JAXB API将Java对象与XML进行相互转换。 
开发步骤
1.创建项目
2.添加库
3.创建POJO类并添加JAXB批注
4.将Java对象转换为XML
5.将XML转换为Java对象
1.创建项目
2.添加库
添加必需的JAXB JAR,jaxb-api,jaxb-core,jaxb-impl,activation。
3.创建POJO类并添加JAXB批注
一些基本和有用的JAXB注释是:
1.    @XmlRootElement:这是要在JAXB中使用的对象的必需注释。它定义了XML内容的根元素。
2.    @XmlType:它将类映射到XML模式类型。我们可以使用它来对XML中的元素进行排序。
3.    @XmlTransient:这将确保不将Object属性写入XML。
4.    @XmlAttribute:这将创建Object属性作为属性。
5.    @XmlElement(name =“ ABC”):这将创建名称为“ ABC”的元素
3.1 Book POJO类
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(name = "book")
@XmlType(propOrder = { "author", "name", "publisher", "isbn" })
public class Book {

private String name;
    private String author;
    private String publisher;
    private String isbn;

@XmlElement(name = "title")
    public String getName() {
        return name;
    }

public void setName(String name) {
        this.name = name;
    }

public String getAuthor() {
        return author;
    }

public void setAuthor(String author) {
        this.author = author;
    }

public String getPublisher() {
        return publisher;
    }

public void setPublisher(String publisher) {
        this.publisher = publisher;
    }

public String getIsbn() {
        return isbn;
    }

public void setIsbn(String isbn) {
        this.isbn = isbn;
    }
}
3.2 Bookstore POJO类
import java.util.List;

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

@XmlRootElement(namespace = "net.javaguides.javaxmlparser.jaxb")
public class Bookstore {

@XmlElementWrapper(name = "bookList")
    @XmlElement(name = "book")
    private List<Book> bookList;
    private String name;
    private String location;

public void setBookList(List<Book> bookList) {
        this.bookList = bookList;
    }

public List<Book> getBooksList() {
        return bookList;
    }

public String getName() {
        return name;
    }

public void setName(String name) {
        this.name = name;
    }

public String getLocation() {
        return location;
    }

public void setLocation(String location) {
        this.location = location;
    }
}
4.将Java对象转换为XML
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

/**
 * Marshaller Class - Convert Java Object to XML
 * 
 * @author Ramesh Fadatare
 *
 */
public class BookMain {
    private static final String BOOKSTORE_XML = "bookstore-jaxb.xml";

public static void main(String[] args) throws JAXBException, IOException {

List<Book> bookList = new ArrayList<Book>();

// create books
        Book book1 = new Book();
        book1.setIsbn("978-0134685991");
        book1.setName("Effective Java");
        book1.setAuthor("Joshua Bloch");
        book1.setPublisher("Amazon");
        bookList.add(book1);

Book book2 = new Book();
        book2.setIsbn("978-0596009205");
        book2.setName("Head First Java, 2nd Edition");
        book2.setAuthor("Kathy Sierra");
        book2.setPublisher("amazon");
        bookList.add(book2);

// create bookstore, assigning book
        Bookstore bookstore = new Bookstore();
        bookstore.setName("Amazon Bookstore");
        bookstore.setLocation("Newyorkt");
        bookstore.setBookList(bookList);

convertObjectToXML(bookstore);

}

private static void convertObjectToXML(Bookstore bookstore) throws JAXBException, FileNotFoundException {
        // create JAXB context and instantiate marshaller
        JAXBContext context = JAXBContext.newInstance(Bookstore.class);
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

// Write to System.out
        m.marshal(bookstore, System.out);

// Write to File
        m.marshal(bookstore, new File(BOOKSTORE_XML));
    }
}
上面的程序创建一个名为bookstore-jaxb.xml的文件,并将  Book对象存储到此XML文件中:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:bookstore
    xmlns:ns2="net.javaguides.javaxmlparser.jaxb">
    <bookList>
        <book>
            <author>Joshua Bloch</author>
            <title>Effective Java</title>
            <publisher>Amazon</publisher>
            <isbn>978-0134685991</isbn>
        </book>
        <book>
            <author>Kathy Sierra</author>
            <title>Head First Java, 2nd Edition</title>
            <publisher>amazon</publisher>
            <isbn>978-0596009205</isbn>
        </book>
    </bookList>
    <location>Newyorkt</location>
    <name>Amazon Bookstore</name>
</ns2:bookstore>

5.将XML转换为Java对象
让我们将上面示例中生成的XML文档转换为Java对象。

让我们将 bookstore-jaxb.xml 文档转换为Java Object:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

/**
 * Unmarshaller Class - Convert XML to Object in Java
 * 
 * @author Ramesh Fadatare
 *
 */
public class BookMain2 {
    private static final String BOOKSTORE_XML = "bookstore-jaxb.xml";

public static void main(String[] args) throws JAXBException, IOException {

convertXMLToObject();
    }

private static Bookstore convertXMLToObject() {
        try {
            JAXBContext context = JAXBContext.newInstance(Bookstore.class);
            Unmarshaller un = context.createUnmarshaller();
            Bookstore bookstore = (Bookstore) un.unmarshal(new File(BOOKSTORE_XML));
            List<Book> list = bookstore.getBooksList();
            for (Book book : list) {
                System.out.println("Book: " + book.getName() + " from " + book.getAuthor());
            }
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return null;
    }
}

输出:
Book: Effective Java from Joshua Bloch
Book: Head First Java, 2nd Edition from Kathy Sierra
结论
在本文中,我们已经看到了如何使用JAXB API在Java对象与XML之间进行转换。

Java JAXB示例相关推荐

  1. 大数据 java 代码示例_功能Java示例 第7部分–将失败也视为数据

    大数据 java 代码示例 这是称为" Functional Java by Example"的系列文章的第7部分. 我在本系列的每个部分中开发的示例是某种"提要处理程序 ...

  2. java方法示例注释 @_Java 8中的功能接口是什么? @功能注释和示例

    java方法示例注释 @ 函数接口是Java 8最重要的概念之一,实际上为lambda表达式提供了动力,但是许多开发人员没有首先了解函数接口在Java 8中的作用就花了很多精力来理解它,并花时间学习l ...

  3. java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...

    java 方法 示例 大家好,这是我在该博客上发表的有关Java 9功能的第一篇文章,今天您将了解我最喜欢的功能"收集的工厂方法" ,它是JEP 269的一部分.JEP代表JDK增 ...

  4. java 观察者模式示例_观察者设计模式示例

    java 观察者模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如 ...

  5. java 泛型示例_使用Java泛型的模板方法模式示例

    java 泛型示例 如果您发现除了某些部分外,您的许多例程完全相同,那么您可能需要考虑使用Template Method来消除容易出错的代码重复 . 这是一个示例:下面是两个做类似事情的类: 实例化并 ...

  6. java 设计模式 示例_Java中的状态设计模式–示例教程

    java 设计模式 示例 状态模式是行为设计模式之一 . 当对象根据其内部状态更改其行为时,将使用状态设计模式. 如果必须根据对象的状态更改其行为,则可以在对象中使用状态变量,并使用if-else条件 ...

  7. java 设计模式 示例_Java中的访问者设计模式–示例教程

    java 设计模式 示例 访客模式是行为设计模式之一 . 当我们必须对一组相似类型的对象执行操作时,将使用访问者模式. 借助访问者模式,我们可以将操作逻辑从对象移动到另一个类. 例如,假设有一个购物车 ...

  8. java 观察者模式示例_Java中的观察者设计模式-示例教程

    java 观察者模式示例 观察者模式是行为设计模式之一 . 当您对对象的状态感兴趣并希望在发生任何更改时得到通知时,观察者设计模式很有用. 在观察者模式中,监视另一个对象状态的对象称为Observer ...

  9. java 设计模式 示例_Java中的中介器设计模式-示例教程

    java 设计模式 示例 中介者模式是行为设计模式之一 ,因此它处理对象的行为. 中介器设计模式用于在系统中不同对象之间提供集中式通信介质. 根据GoF,中介者模式意图是: 通过封装不同对象集相互交互 ...

最新文章

  1. 美国韩国科学家纷纷开发出电子机器人“皮肤”,据称具有比人类更好的触觉...
  2. PMP-【第9章 项目资源管理】-2021-2-15(200页-219页)
  3. JavaScript开发
  4. 【机器学习】降维代码练习
  5. java web 定制化界面_实现javaWeb网页自定义出错界面
  6. 牛客网 牛客小白月赛1 C.分元宵-快速幂
  7. 深度学习基础 | RNN家族全面解析
  8. 移动端预览PDF及转成图片保存
  9. React 18 超全升级指南
  10. 电脑重装系统找不到计算机了,戴尔电脑重装系统后找不到硬盘或找不到引导设备怎么办?...
  11. 逆水寒官方网站服务器,《逆水寒》2019年7月4日更新公告
  12. 计算机基础知识第三章答案,2011年河北省职称计算机模拟习题(基础知识第三章+标准答案)...
  13. 斯尔福化学实验室设计规划环境及建设要求
  14. 主成分回归python实现
  15. 南昌大学计算机就业能去哪,几所就业率高的211院校,考生毕业后就业不用愁!...
  16. input限制只能输入数字/字母/英文符号
  17. 新联邦业务数据湖为颠覆大数据应用铺路
  18. [第一讲]DSP28335将Flash中的代码拷贝到RAM中运行
  19. 【Java基础】迷宫问题的Java代码实现
  20. 雷达系统仿真 ——End-2-End的雷达系统仿真

热门文章

  1. 用树莓派打造一个属于自己的服务器
  2. 南京计算机会计专业排名2015年,2015年二本会计专业大学排名
  3. 钉钉的收费 [钉钉深圳研发团队 denny/2016.01.06/ 59888745@qq.com]
  4. Onvif协议学习:3、了解web services
  5. 【菜鸟源码模板】最新素材下载类网站 带会员充值系统 HTML5自适应手机版
  6. 建筑八大员培训湖北劳务员培训我国与德国的建筑劳务派遣对比
  7. 高手必备!Vista的经典绝技大揭密!
  8. Ansible安装及模块管理
  9. 统计推断——正态性检验(图形方法、偏度和峰度、统计(拟合优度)检验)
  10. HTML+CSS+JavaScript入门教程(万字)