一、重要类说明

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

二、实例

1、JavaBean

import java.util.Date;import java.util.List;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlElementWrapper;import javax.xml.bind.annotation.XmlRootElement;import javax.xml.bind.annotation.XmlType;import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;import com.tzz.util.xml.JaxbDateSerializer;@XmlAccessorType(XmlAccessType.FIELD)@XmlRootElement(name = "country")@XmlType(propOrder = { "id", "createDate", "name", "provinceList" })public class Country {private Integer id;@XmlJavaTypeAdapter(JaxbDateSerializer.class)private Date createDate;@XmlElement(name = "name")private String name;@XmlElementWrapper(name = "provinces")@XmlElement(name = "province")private List<Province> provinceList;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Date getCreateDate() {return createDate;}public void setCreateDate(Date createDate) {this.createDate = createDate;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<Province> getProvinceList() {return provinceList;}public void setProvinceList(List<Province> provinceList) {this.provinceList = provinceList;}}
import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlType;@XmlAccessorType(XmlAccessType.FIELD)@XmlType(propOrder = { "name", "provCity" })public class Province {@XmlElement(name = "name")private String name;@XmlElement(name = "provCity")private String provCity;public String getProvCity() {return provCity;}public void setProvCity(String provCity) {this.provCity = provCity;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

2、转化工具类

import java.io.StringReader;import java.io.StringWriter;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;/** * Jaxb 2.0 * */public class JaxbXmlUtil {@SuppressWarnings("unchecked")public static <T> T xmlToBean(String xml, Class<T> beanClass) {try {JAXBContext jaxbContext = JAXBContext.newInstance(beanClass);Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();T user = (T) unmarshaller.unmarshal(new StringReader(xml));return user;} catch (JAXBException e) {e.printStackTrace();return null;}}/**Bean转XML*/public static String beanToXml(Object obj) {String result = null;try {JAXBContext context = JAXBContext.newInstance(obj.getClass());Marshaller marshaller = context.createMarshaller();//决定是否在转换成xml时同时进行格式化(即按标签自动换行,否则即是一行的xml)marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);//Marshaller.JAXB_ENCODING xml的编码方式marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");StringWriter writer = new StringWriter();marshaller.marshal(obj, writer);result = writer.toString();} catch (Exception e) {e.printStackTrace();}return result;}}

3、测试类

import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import org.junit.Test;import com.tzz.test.util.xml.entity.Country;import com.tzz.test.util.xml.entity.Province;import com.tzz.util.xml.JaxbXmlUtil;public class TestJaxbBeanToXmlUtil {@Testpublic void testBeanToXml() {Country country = new Country();country.setId(1);country.setCreateDate(new Date());country.setName("中国");List<Province> list = new ArrayList<Province>();Province province = new Province();province.setName("广东省");province.setProvCity("广州市");Province province2 = new Province();province2.setName("湖南省");province2.setProvCity("长沙市");list.add(province);list.add(province2);country.setProvinceList(list);String xml = JaxbXmlUtil.beanToXml(country);System.out.println(xml);}@Testpublic void testXmlToBean() {String xml = "<?xml version='1.0' encoding='utf-8' ?>" + "<country>" + "<id>1</id>"+ "<createDate>2016-03-10 09:36:01</createDate>" + "<name>中国</name>" + "<provinces>" + "<province><name>广东省</name><provCity>广州市</provCity></province>" + "<province><name>湖南省</name><provCity>长沙市</provCity></province>" + "</provinces>" + "</country>";Country country = JaxbXmlUtil.xmlToBean(xml, Country.class);System.out.println(country.getId() + "--" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(country.getCreateDate()) + "--" + country.getName());for (Province p : country.getProvinceList()) {System.out.println(p.getName() + "---" + p.getProvCity());}}}

4、测试结果

4.1、运行testBeanToXml方法

<?xml version="1.0" encoding="utf-8" standalone="yes"?><country>    <id>1</id>    <createDate>2016-03-10 05:24:57</createDate>    <name>中国</name>    <provinces>        <province>            <name>广东省</name>            <provCity>广州市</provCity>        </province>        <province>            <name>湖南省</name>            <provCity>长沙市</provCity>        </province>    </provinces></country>

4.2、运行testXmlToBean方法

1--2016-03-10 09:36:01--中国广东省---广州市湖南省---长沙市

更多相关文章

  1. 简单介绍XML Schema中的elementFormDefault属性
  2. jscript和vbscript对XML元素属性进行操作的方法
  3. 分享一个jscript与vbscript操作XML元素属性的方法
  4. 内容和属性用法的相关文章推荐
  5. 如何直接访问php实例对象的private属性
  6. php通过反射修改Exception实例的message属性
  7. jQuery——将title属性用作悬停的文本,但只在同一父类中使用。
  8. jQuery编程基础精华02(属性、表单过滤器,元素的each,表单选择器,子元

随机推荐

  1. 移动互联网应用技术架构简介-Android
  2. android之Intent基本使用
  3. Linux与Android
  4. Android中Activity的初步接触(一)
  5. 彻底解决Android GPS没法定位这一顽固问
  6. Android智能推荐、MVP架构电商应用、mark
  7. 【Android您问我讲】Android 2.x中使用ac
  8. Android 开发艺术探索笔记之七 -- Androi
  9. Android GUI系统框架介绍
  10. Android进程 Handler Message Looper