jaxb实现java对象与xml之间转换_JAXB实现XML与Java对象转换

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对象转换的具体操作,代码详细清楚,如果在日常工作遇到这个问题,希望你能通过这篇文章解决问题。如果想了解更多相关内容,欢迎关注亿速云行业资讯频道!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值