Jaxb2 实现JavaBean与xml互转 http://zhuchengzzcc.iteye.com/blog/1838702
- 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、
package utils; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; /** * Jaxb2工具类 * @author zhuc * @create 2013-3-29 下午2:40:14 */ public class JaxbUtil { /** * JavaBean转换成xml * 默认编码UTF-8 * @param obj * @param writer * @return */ public static String convertToXml(Object obj) { return convertToXml(obj, "UTF-8"); } /** * JavaBean转换成xml * @param obj * @param encoding * @return */ 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; } /** * xml转换成JavaBean * @param xml * @param c * @return */ @SuppressWarnings("unchecked") public static <T> T converyToJavaBean(String xml, Class<T> c) { T t = null; try { JAXBContext context = JAXBContext.newInstance(c); Unmarshaller unmarshaller = context.createUnmarshaller(); t = (T) unmarshaller.unmarshal(new StringReader(xml)); } catch (Exception e) { e.printStackTrace(); } return t; } }
2、简单转换
package t1; import java.util.Date; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; /** * @author zhuc * @create 2013-3-29 下午2:49:48 */ @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement @XmlType(name = "book", propOrder = { "author", "calendar", "price", "id" }) public class Book { @XmlElement(required = true) private String author; @XmlElement(name = "price_1", required = true) private float price; @XmlElement private Date calendar; @XmlAttribute private Integer id; /** * @return the author */ public String getAuthor() { return author; } /** * @return the price */ public float getPrice() { return price; } /** * @return the calendar */ public Date getCalendar() { return calendar; } /** * @return the id */ public Integer getId() { return id; } /** * @param author the author to set */ public void setAuthor(String author) { this.author = author; } /** * @param price the price to set */ public void setPrice(float price) { this.price = price; } /** * @param calendar the calendar to set */ public void setCalendar(Date calendar) { this.calendar = calendar; } /** * @param id the id to set */ public void setId(Integer id) { this.id = id; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "Book [author=" + author + ", price=" + price + ", calendar=" + calendar + ", id=" + id + "]"; } }
package t1; import java.util.Date; import javax.xml.bind.JAXBException; import org.junit.Test; import utils.JaxbUtil; /** * @author zhuc * @create 2013-3-29 下午2:50:00 */ public class JaxbTest1 { /** * @throws JAXBException */ @Test public void showMarshaller() { Book book = new Book(); book.setId(100); book.setAuthor("James"); book.setCalendar(new Date()); book.setPrice(23.45f); //默认是0.0 String str = JaxbUtil.convertToXml(book); System.out.println(str); } /** * @throws JAXBException */ @Test public void showUnMarshaller() { String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + "<book id=\"100\">" + " <author>James</author>" + " <calendar>2013-03-29T09:25:56.004+08:00</calendar>" + " <price_1>23.45</price_1>" + "</book>"; Book book = JaxbUtil.converyToJavaBean(str, Book.class); System.out.println(book); } }
3、类中包含复杂对象的转换
package t2; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; /** * @author zhuc * @create 2013-3-29 下午2:51:44 */ @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "student") @XmlType(propOrder = {}) public class Student { @XmlAttribute private Integer id; @XmlElement private String name; @XmlElement(name = "role") private Role role; /** * @return the id */ public Integer getId() { return id; } /** * @return the name */ public String getName() { return name; } /** * @return the role */ public Role getRole() { return role; } /** * @param id the id to set */ public void setId(Integer id) { this.id = id; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @param role the role to set */ public void setRole(Role role) { this.role = role; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", role=" + role + "]"; } }
package t2; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; /** * @author zhuc * @create 2013-3-29 下午2:51:52 */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { "name", "desc" }) public class Role { @XmlElement private String name; @XmlElement private String desc; /** * @return the name */ public String getName() { return name; } /** * @return the desc */ public String getDesc() { return desc; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @param desc the desc to set */ public void setDesc(String desc) { this.desc = desc; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "Role [name=" + name + ", desc=" + desc + "]"; } }
package t2; import org.junit.Test; import utils.JaxbUtil; /** * @author zhuc * @create 2013-3-29 下午2:52:00 */ public class JaxbTest2 { @Test public void showMarshaller() { Student student = new Student(); student.setId(12); student.setName("test"); Role role = new Role(); role.setDesc("管理"); role.setName("班长"); student.setRole(role); String str = JaxbUtil.convertToXml(student); System.out.println(str); } @Test public void showUnMarshaller() { String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"+ "<student id=\"12\">"+ " <name>test</name>"+ " <role>"+ " <name>班长</name>"+ " <desc>管理</desc>"+ "</role>"+ "</student>"; Student student = JaxbUtil.converyToJavaBean(str, Student.class); System.out.println(student); } }
4、集合对象的转换
package t3; 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; /** * @author zhuc * @create 2013-3-29 下午2:55:56 */ @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "country") @XmlType(propOrder = { "name", "provinceList" }) public class Country { @XmlElement(name = "country_name") private String name; @XmlElementWrapper(name = "provinces") @XmlElement(name = "province") private List<Province> provinceList; /** * @return the name */ public String getName() { return name; } /** * @return the provinceList */ public List<Province> getProvinceList() { return provinceList; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @param provinceList the provinceList to set */ public void setProvinceList(List<Province> provinceList) { this.provinceList = provinceList; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "Country [name=" + name + ", provinceList=" + provinceList + "]"; } }
package t3; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; /** * @author zhuc * @create 2013-3-29 下午2:56:03 */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { "name", "provCity" }) public class Province { @XmlElement(name = "province_name") private String name; @XmlElement(name = "prov_city") private String provCity; /** * @return the provCity */ public String getProvCity() { return provCity; } /** * @param provCity the provCity to set */ public void setProvCity(String provCity) { this.provCity = provCity; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "Province [name=" + name + ", provCity=" + provCity + "]"; } }
package t3; import java.util.ArrayList; import java.util.List; import org.junit.Test; import utils.JaxbUtil; /** * @author zhuc * @create 2013-3-29 下午2:56:11 */ public class JaxbTest3 { /** * @throws JAXBException */ @Test public void showMarshaller() { Country country = new Country(); 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 str = JaxbUtil.convertToXml(country); System.out.println(str); } /** * */ @Test public void showUnMarshaller() { String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"+ "<country>"+ " <country_name>中国</country_name>"+ " <provinces>"+ " <province>"+ " <province_name>江苏省</province_name>"+ " <prov_city>南京市</prov_city>"+ " </province>"+ " <province>"+ " <province_name>浙江省</province_name>"+ " <prov_city>杭州市</prov_city>"+ " </province>"+ " </provinces>"+ "</country>"; Country country = JaxbUtil.converyToJavaBean(str, Country.class); System.out.println(country); } }
JAXB2序列化XML的更多相关文章
-
对象序列化XML
/// <summary>/// 对象序列化XML/// </summary>/// <param name="type">类型</par ...
-
WCF中序列化(XML\JSON\Dt)
序列化 是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象. 序列化描述了持久化 ...
-
C# 对象 序列化 XML
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
-
C#.NET序列化XML、JSON、二进制微软自带DLL与newtonsoft(json.net)
序列化是将对象转换成另一种格式(XML.json.二进制byte[]) JSON序列化 .NET中有三种常用的JSON序列化的类,分别是: Newtonsoft.Json.JsonConvert类(推 ...
-
SharePreference是如何实现的——序列化XML文件
还记得上一篇我们讲到了用SharePreference来存储数据,那么究竟它是如何实现的呢,今天我们就来仔细看看其实现的细节,我们给它一个准确的名字,叫做XML序列化器(XmlSerializer). ...
-
C# 序列化xml
把一个类序列化成xml,显示在txtarea,然后在获取txtarea的值进行反序列化成类,因为一个字段的值是url形式的,url里面有这个符号:&,所以反序列化的时候报错了,查了好久才发现是 ...
-
反序列化和序列化xml使用反射处理节点的属性
当一个xml中有大量的属性XmlAttribute需要序列化和反序列化,通常需要复制粘贴大量的如下代码,显得很丑陋,而且容易出错: XmlAttribute attr = Doc.CreateAttr ...
-
C#序列化xml,开发常用
序列化操作对于开发人员来说最熟悉不过了. 序列化分为:序列化和反序列化. 序列化名词解释:序列化是将对象状态转换为可保持或传输的格式的过程. 与序列化相对的是反序列化,它将流转换为对象.这两个过程结合 ...
-
如何在IJ中使用Jaxb2通过xml定义生成对应的Java Entity类的文件
#0. 准备要转换的xml文件,在Project视界中,右击这个xml文件,在弹出的菜单上选择“Generate XSD schema from XML File...”, 按默认设置生成xsd文件. ...
随机推荐
-
【转】iframe和父页,window.open打开页面之间的引用
[转]iframe和父页,window.open打开页面之间的引用 iframe和父页,window.open打开页面和被打开页面之间的关系可以通过下面的对象获取到 1)通过iframe加载的,在if ...
-
2015ACM/ICPC亚洲区上海站
5573 Binary Tree(构造) 题意:给你一个二叉树,根节点为1,子节点为父节点的2倍和2倍+1,从根节点开始依次向下走k层,问如何走使得将路径上的数进行加减最终结果得到n. 联想到二进制. ...
-
photoshop, 钢笔上色
photoshop中用 钢笔工具 勾好轮廓后,使用 路径选择工具 选中轮廓,右键弹出菜单中选 创建矢量蒙板,然后就可以在区域内用 笔刷工具 涂抹上色,不用担心出界了. ----补充2017-1-2 将 ...
-
Android Studio2.x版本无法自动关联源码的解决方法
Android Studio2.x版本无法自动关联源码的解决方法 在学习android开发过程中,对于一个不熟悉的类,阅读源码是一个很好的学习方式,使用andorid studio开发工具的SDK M ...
-
Marshal 类的内存操作的一般功能
Marshal类 提供了一个方法集,这些方法用于分配非托管内存.复制非托管内存块.将托管类型转换为非托管类型,此外还提供了在与非托管代码交互时使用的其他杂项方法. 命名空间:System.Runtim ...
-
ASP.NET - List<;>; 绑定 DropDownList
代码: //声明泛型 List<category> inof = new List<category>();//二级分类 //声明类使用的对象类 public class ca ...
-
Linked List 实例
文件功能:实现了动态建立一个学生信息的链表包括链表的创建.插入.删除.和打印输出学生信息包括姓名和分数 #include<iostream> #include<string> ...
-
更改MySQL密码
#安装MySQL5.7参考:https://blog.csdn.net/qq_23033339/article/details/80872136#MYSQL的基础操作参考:https://www.cn ...
-
详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(上)
SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...
-
Win7 VS2017编译Audacity2.1.3
最近比较热衷折腾大型开源软件编译,因为在逐渐用开源软件替换盗版软件,除去盗版用着不安全的原因外,主要还是因为开源软件有源码,可以学习研究,另外就是体积小. 像Matlab每次装完都用不上什么功能,体积 ...