栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > 其他 > xml语言

Jaxb2实现Bean与xml互转的示例代码详解

xml语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jaxb2实现Bean与xml互转的示例代码详解

一、重要类说明

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 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 getProvinceList() {return provinceList;}public void setProvinceList(List 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;public class JaxbXmlUtil {@SuppressWarnings("unchecked")public static  T xmlToBean(String xml, Class 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;}}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 list = new ArrayList();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 = "" + "" + "1"+ "2016-03-10 09:36:01" + "中国" + "" + "广东省广州市" + "湖南省长沙市" + "" + "";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方法

    1    2016-03-10 05:24:57    中国                        广东省            广州市                            湖南省            长沙市            

4.2、运行testXmlToBean方法

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

以上就是Jaxb2实现Bean与xml互转的示例代码详解的详细内容,更多请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/794448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号