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.java

package 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.java

package 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測试方法。控制台输出:

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就可以。

java xml amp_Javaamp;Xml教程(十一)JAXB实现XML与Java对象转换相关推荐

  1. flash读取xml简明实例教程

    ----------------------------flash读取xml简明实例教程 -------------------------- **************************** ...

  2. Java 自定义类加载器教程

    文章目录 Java 自定义类加载器教程 loadClass findClass defineClass 函数调用过程 Java 自定义类加载器教程 除了在面试中遇到类的加载器的概率会高外,在实际的工作 ...

  3. Java闭关修炼64课 很适合新手学习的JAVA视频教程

    Java闭关修炼64课 很适合新手学习的JAVA视频教程 java闭关修炼第一课 什么是java(1).rar   java闭关修炼第一课 什么是java.rar   java闭关修炼第七课 基础语言 ...

  4. JavaXml教程(十一)JAXB实现XML与Java对象转换

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

  5. 使用JAXB将XML Schema绑定到Java类

    http://blog.csdn.net/zsyspace/article/details/1786079 Java Architecture for XML Binding (JAXB) 是一项可以 ...

  6. java xmladapte_三步解决JAXB生成XML包含CDATA问题—JAVA编程

    废话不多说,写此文档的目的就是为了帮助java开发者,解决利用JAXB生成XML时,XML中带有CDATA问题. 分三步走: 首先创建适配器类:CDataAdapter.java package co ...

  7. 使用JDK的JAXB将XML转化为JAVA对象,原生支持

    工作中有时候会对接XML的数据,其实JDK中的JAXB已经集成了相应的API,可以将XML转化为JAVA对象 使用起来只需关注几个注解,由于是原生支持,也不用引入第三方JAR包,总体来说还算方便. p ...

  8. xml java jaxb_【Java】JAXB操作XML用法详解

    什么是JAXB? JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.在JAX-WS(Java的W ...

  9. java指定sql生成xml,用Java实现可保存状态的数据库生成XML树(8)-JSP教程,Java与XML...

    4.ejb-jar.xml文件 //sun microsystems, inc.//dtd enterprise javabeans 1.1//en http://java.sun.com/j2ee/ ...

最新文章

  1. 功能强大的打包工具 NSIS,全部用脚本搞定 使用经验总结帖(持续更新中。。。)...
  2. mysql 缓存监控_MySQL监控性能的一些方法总结
  3. 【编译原理】入门总结
  4. VS2010 教程:创建一个 WPF 应用程序 (第一节)
  5. linux引导过程和服务控制
  6. Java中对象的串行化(Serialization)和transient关键字
  7. 排队论模型(四):M / M / s 混合制排队模型
  8. 细等线体cass_CAD中,刚打开一个文件,细等线体显示不出来,然后换个字体后在换回细等线体才正常显示,怎么回事?...
  9. 运筹学学习笔记2 python-or tools 使用
  10. python日志:去掉noteexpress导出参考文献题录的空格
  11. 2021年最完善的谷歌SEO关键词调研技巧
  12. python 划分训练集 测试集 验证集_如何正确使用机器学习中的训练集、验证集和测试集?...
  13. Android编译优化系列-kapt篇
  14. vscode使用ssh连接远程Ubuntu服务器(记录)
  15. 如何向oracle中导入数据,Oracle导入导出数据库的语法_Oracle_Oracle语法_Oracle数据库_课课家...
  16. 猎杀对决与服务器连接中断,猎杀对决游戏常见问题汇总_猎杀对决游戏常见问题解决办法...
  17. Xson:Java对象序列化和反序列化工具
  18. 数据结构-线性表-串
  19. 岛国电影生物科普就是强—生命大跃进
  20. 中国中间相沥青基碳纤维行业研究与投资预测报告(2022版)

热门文章

  1. Ext3.2 beta版已发布
  2. Wordpress 修改 mysql 插件_史上最详细的WordPress安装教程(三):安装php 5.6及fpm、pdo、mysql等插件...
  3. Java:选择排序法
  4. java输出华氏摄氏温度转换表_Python练习题2.10输出华氏-摄氏温度转换表
  5. 信息学奥赛一本通 1124:矩阵加法 | OpenJudge NOI 1.8 08:矩阵加法
  6. 信息奥赛一本通(1839:【05NOIP提高组】谁拿了最多奖学金)
  7. 滑雪(信息学奥赛一本通-T1280)
  8. 菲波那契数列(信息学奥赛一本通-T1201)
  9. 4.4.5 清除变量内容
  10. vscode输入vue自动_使用vscode,新建.vue文件,tab自动生成vue代码模板