JAXB实现XML与Java对象转换

发布时间:2020-05-14 13:42:04

来源:亿速云

阅读:36

作者:Leah

今天小编给大家分享的是JAXB实现XML与Java对象转换的实例展示,相信大部分人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,话不多说,一起往下看吧。

JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,能够帮助开发者很方便的將XML和Java对象进行相互转换。

本文以一个简单的例子介绍JAXB的使用,首先我们需要了解一下JAXB常用的API。JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。

Marshaller接口,将Java对象序列化为XML数据。

Unmarshaller接口,将XML数据反序列化为Java对象。

@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属性。

我们需要进行绑定的Java Bean内容如下:

Employee.javapackage net.csdn.beans;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlRootElement;

import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement @XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" })

public class Employee {

private String name;

private String gender;

private int age;

private String role;

public String getName() {

return name;

} public void setName(String name) {

this.name = name;

} public String getGender() {

return gender;

} public void setGender(String gender) {

this.gender = gender;

} public int getAge() {

return age;

} public void setAge(int age) {

this.age = age;

} public String getRole() {

return role;

} public void setRole(String role) {

this.role = role;

} @Override

public String toString() {

return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender="

+ this.gender + " Role=" + this.role;

}

}

需要转换为Java对象的XML文件内容如下:

employee.xml<?xml version="1.0"?>

Pankaj

29

Java Developer

Male

接下来编写测试用例代码:

TestJAXB.javapackage net.csdn.test;

import java.io.InputStream;

import java.io.StringReader;

import java.io.StringWriter;

import javax.xml.bind.JAXBContext;

import javax.xml.bind.Marshaller;

import javax.xml.bind.Unmarshaller;

import net.csdn.beans.Employee;

import org.junit.Test;public class TestJAXB {

@Test

public void testXml2Obj() throws Exception {

InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml");

byte[] bytes = new byte[is.available()];

is.read(bytes);

String xmlStr = new String(bytes);

JAXBContext context = JAXBContext.newInstance(Employee.class);

Unmarshaller unmarshaller = context.createUnmarshaller();

Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr));

System.out.println(emp);

}

@Test

public void testObj2Xml() {

Employee emp = new Employee();

emp.setAge(10);

emp.setGender("Male");

emp.setName("Jane");

emp.setRole("Teacher");

String xmlStr = TestJAXB.convertToXml(emp,"utf-8");

System.out.println(xmlStr);

}

public static String convertToXml(Object obj, String encoding) {

String result = null;

try {

JAXBContext context = JAXBContext.newInstance(obj.getClass());

Marshaller marshaller = context.createMarshaller();

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);

StringWriter writer = new StringWriter();

marshaller.marshal(obj, writer);

result = writer.toString();

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

}

运行testObj2Xml测试方法,控制台输出:<?xml version="1.0" encoding="utf-8" standalone="yes"?>

Jane

10

Teacher

Male

运行testXml2Obj测试方法,控制台输出:Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer

注:本例中使用JUnit4作为单元测试工具,在Eclipse中点击Window->Show View->OutLine菜单打开outline视图,分别在testXml2Obj和testObj2Xml方法上点击右键->Run As->JUnit Test即可。

JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,能够帮助开发者很方便的將XML和Java对象进行相互转换。

本文以一个简单的例子介绍JAXB的使用,首先我们需要了解一下JAXB常用的API。JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。

Marshaller接口,将Java对象序列化为XML数据。

Unmarshaller接口,将XML数据反序列化为Java对象。

@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属性。

我们需要进行绑定的Java Bean内容如下:

Employee.javapackage net.csdn.beans;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlRootElement;

import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement

@XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" })

public class Employee {

private String name;

private String gender;

private int age;

private String role;

public String getName() {

return name;

} public void setName(String name) {

this.name = name;

} public String getGender() {

return gender;

} public void setGender(String gender) {

this.gender = gender;

} public int getAge() {

return age;

} public void setAge(int age) {

this.age = age;

} public String getRole() {

return role;

} public void setRole(String role) {

this.role = role;

} @Override

public String toString() {

return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender="

+ this.gender + " Role=" + this.role;

}

}

需要转换为Java对象的XML文件内容如下:

employee.xml<?xml version="1.0"?>

Pankaj

29

Java Developer

Male

接下来编写测试用例代码:

TestJAXB.javapackage net.csdn.test;

import java.io.InputStream;

import java.io.StringReader;

import java.io.StringWriter;

import javax.xml.bind.JAXBContext;

import javax.xml.bind.Marshaller;

import javax.xml.bind.Unmarshaller;

import net.csdn.beans.Employee;

import org.junit.Test;

public class TestJAXB {

@Test

public void testXml2Obj() throws Exception {

InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml");

byte[] bytes = new byte[is.available()];

is.read(bytes);

String xmlStr = new String(bytes);

JAXBContext context = JAXBContext.newInstance(Employee.class);

Unmarshaller unmarshaller = context.createUnmarshaller();

Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr));

System.out.println(emp);

}

@Test

public void testObj2Xml() {

Employee emp = new Employee();

emp.setAge(10);

emp.setGender("Male");

emp.setName("Jane");

emp.setRole("Teacher");

String xmlStr = TestJAXB.convertToXml(emp,"utf-8");

System.out.println(xmlStr);

}

public static String convertToXml(Object obj, String encoding) {

String result = null;

try {

JAXBContext context = JAXBContext.newInstance(obj.getClass());

Marshaller marshaller = context.createMarshaller();

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);

StringWriter writer = new StringWriter();

marshaller.marshal(obj, writer);

result = writer.toString();

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

}

运行testObj2Xml测试方法,控制台输出:<?xml version="1.0" encoding="utf-8" standalone="yes"?>

Jane

10

Teacher

Male

运行testXml2Obj测试方法,控制台输出:Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer

注:本例中使用JUnit4作为单元测试工具,在Eclipse中点击Window->Show View->OutLine菜单打开outline视图,分别在testXml2Obj和testObj2Xml方法上点击右键->Run As->JUnit Test即可。

以上就是JAXB实现XML与Java对象转换的具体操作,代码详细清楚,如果在日常工作遇到这个问题,希望你能通过这篇文章解决问题。如果想了解更多相关内容,欢迎关注亿速云行业资讯频道!

jaxb实现java对象与xml之间转换_JAXB实现XML与Java对象转换相关推荐

  1. java与c的交互,java与c/c++之间的数据交互,java交互

    java与c/c++之间的数据交互,java交互 java与c/c++之间的数据交互有这样几种情况:java和c/c++之间基本数据类型的交互,java向c/c++传递对象类型,c/c++向java返 ...

  2. JAXB实现java对象与xml之间转换

    一.Jaxb处理java对象和xml之间转换常用的annotation有: 1. @XmlType 2. @XmlElement 3. @XmlRootElement 4. @XmlAttribute ...

  3. JAXB JavaBean与Xml之间转换

    JAXB JavaBean与Xml之间转换问题之二 接着上一篇来说,上一篇主要讲述的是关于jaxb将实体转换为xml的使用方法和注解的一些过程,但是凡事都会有缺点,而上述方法的缺点就是marshall ...

  4. oxygen 生成java对象_利用oxygen编辑并生成xml文件,并使用JAVA的JAXB技术完成xml的解析...

    首先下载oxygen软件(Oxygen XML Editor),目前使用的是试用版(可以安装好软件以后get trial licence,获得免费使用30天的权限,当然这里鼓励大家用正版软件!!!) ...

  5. java关于对象(javabean)与xml之间的相互转换

    今天我们要探讨的一个问题是,如何将xml格式的字符串转换成对象,以及对象转换成xml字符串. 简介 现如今,虽然数据的传输大部分都是用json格式来进行传输,但是xml毕竟也会有一些老的项目在进行使用 ...

  6. Java 中,类、类对象、泛型之间的转换

    Java 中,类.类对象.泛型之间的转换 R 为非泛型 获得类 通过类型名来获得类 通过对象来获得类 通过类名字符串来获得类 通过类来获得类名字符串 通过类来获得对象 使用 R 的无参数构造器来创建对 ...

  7. Java子类与父类之间的对象转换

    在使用Java的多态机制时,常常使用的一个特性便是子类和父类之间的对象转换.从子类向父类的转换称为向上转换(upcasting),通过向上转换,我们能够在编写程序时采用通用程序设计的思想,在需要使用子 ...

  8. java 自定义注解实现不同对象之间的拷贝(支持大小写、驼峰转换)

    java 自定义注解实现不同对象之间的拷贝(支持大小写.驼峰转换) 1.需求 要实现两个属性名称完全不同的对象之间的拷贝.具体如下 原对象 /*** 原实体*/ @Data public class ...

  9. java xmap_转:使用XMAP完成JavaBean和XML之间转换

    XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦.下面介绍如何进行XML和Java Bean的互相转换. 最近项目中用到了xml和java bea ...

  10. java xmap_使用XMAP完成JavaBean和XML之间转换

    XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦.下面介绍如何进行XML和Java Bean的互相转换. 最近项目中用到了xml和java bea ...

最新文章

  1. 中学生python程序设计大赛_贵州民族大学第一届程序设计大赛圆满举办
  2. iOS视频边下载边播放
  3. 推理速度快千倍!谷歌开源语言模型Transformer-XL
  4. 开发基于GUI的R包(2)
  5. 数据分页模块系列 (二) 完美封装PageModel实现分页模块
  6. deepin linux mac主题,deepin,安装GNOME桌面环境,类mac界面美化
  7. 擦地机器人修理_第一次修扫地机器人
  8. android toast 带图片,Android 带图片的Toast
  9. 经纬度坐标转像素坐标
  10. 综述类论文怎么写引言和结语?
  11. 戴尔 微博 服务器 销售,微博营销案例之戴尔
  12. 用word快速将数字字体换成新罗马详细简单方法
  13. OpenStack HA
  14. 微信小程序navigate标签
  15. 小红书榜单,五大行业图文笔记类
  16. Codeforces Round #439 (Div. 2)C - The Intriguing Obsession(简单dp)
  17. ios 编译链接库问题
  18. Excel如何将工作表按数值大小排序
  19. 《嵌入式 - 模块》RW007 WIFI模块联网与使用(一)
  20. IP协议 (通俗易懂),IP协议的主要功能及实现原理,IP地址分类,IP数据包分片,IP数据报格式。

热门文章

  1. Codeforces 1110D. Jongmah 动态规划
  2. java将Word文件转换为html文件
  3. [转载] LINUS:利用二级指针删除单向链表
  4. 【GStreamer开发】GStreamer基础教程05——集成GUI工具
  5. Lecture Notes: Macros
  6. 那些年不错的Android开源项目
  7. sqlite具体操作篇
  8. 硬件开发者之路之——保护电路系列之输入电源端口的防护设计
  9. jmeter无法启动的解决办法
  10. 07 -模型层ORM