javabean 和 xml 互转
1.场景描述
将javabean对象转换为xml字符串,将xml字符串转换为javabean对象。
2.maven依赖
<dependency>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.7.0</version>
</dependency>
3.注解说明
@XmlRootElement 将类或枚举类型映射到 XML 元素。
@XmlElement 将 JavaBean 属性映射到派生于属性名称的 XML 元素。
@XmlTransient 阻止将 JavaBean 属性映射到 XML 表示形式。
@XmlTransient 注释对于解决 JavaBean 属性名称与字段名称之间的名称冲突,或者用于防止字段/属性的映射。当取消首字母大写的 JavaBean 属性名称与字段名称相同时,就可能发生名称冲突。如果 JavaBean 属性引用该字段,那么可以通过防止映射使用 @XmlTransient 注释的字段或 JavaBean 属性来解决名称冲突。
4.代码编写
工具类
import org.apache.commons.beanutils.BeanUtils;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource; import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.StringReader;
import java.io.StringWriter;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List; /**
* xml与bean互转工具类
*/
public class JaXmlBeanUtil { /**
* 将javaBean转换为xml对象
* @param clazz
* @param bean
* @return
*/
public static String parseBeanToXml(Class clazz,Object bean){
StringWriter sw = null;
try {
JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
sw = new StringWriter();
//该值默认为false,true则不会创建即头信息,即<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
jaxbMarshaller.marshal(bean, sw);
} catch (JAXBException e) {
e.printStackTrace();
}
return sw.toString();
} /**
*将xml对象转换为javaBean
* @param clazz
* @param xml
* @return
*/
public static Object parseXmlToBean(Class clazz,String xml){
if(xml!=null&&xml!=""){
Field[] fields = clazz.getDeclaredFields();
List<Field> fieldList = new ArrayList<Field>();
for (Field fie : fields) {
if (fie.isAnnotationPresent(XmlElementAnno.class)) {
fieldList.add(fie);
}
}
try {
StringReader read = new StringReader(xml);
InputSource source = new InputSource(read);
//创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(source);
//取的根元素
Element root = doc.getRootElement();
Object object = clazz.newInstance();
if(!fieldList.isEmpty()){
for (Field field : fieldList) {
Element child = root.getChild(field.getName());
if(child!=null){
BeanUtils.setProperty(object, field.getName(), child.getValue());
}
}
}
return object;
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}
javabean对象
import com.bestpay.ecurrency.utils.XmlElementAnno; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient; @XmlRootElement(name="root")
public class JaBeanToXml { @XmlElement(name="xmlname")
@XmlElementAnno
private String name; @XmlElement(name="xmladdress")
@XmlElementAnno
private String address; @XmlElement(name="xmlage")
@XmlElementAnno
private int age; @XmlTransient
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @XmlTransient
public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @XmlTransient
public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return "JaBeanToXml{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", age=" + age +
'}';
}
}
自定义注解,用于指定那类属性进行转换
import java.lang.annotation.*; @Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface XmlElementAnno { }
测试类
import com.bestpay.ecurrency.pojo.JaBeanToXml;
import com.bestpay.ecurrency.utils.JaXmlBeanUtil;
import org.junit.Test; public class JaBeanToXmlTest {
/**
* xml转javaBean
*/
@Test
public void parseXmlToJaBean() {
//组装xml
StringBuilder sb = new StringBuilder();
sb.append("<root>");
sb.append("<name>wangkecheng</name>");
sb.append("<address>上海</address>");
sb.append("<age>27</age>");
sb.append("</root>"); JaBeanToXml jaBeanToXml = (JaBeanToXml) JaXmlBeanUtil.parseXmlToBean(JaBeanToXml.class,sb.toString());
System.out.println(jaBeanToXml.toString());
} /**
* bean转xml
*/
@Test
public void parseJaBeanToXml(){ JaBeanToXml jaBeanToXml = new JaBeanToXml();
jaBeanToXml.setName("wangkecheng");
jaBeanToXml.setAddress("上海");
jaBeanToXml.setAge(28); String xml = JaXmlBeanUtil.parseBeanToXml(JaBeanToXml.class,jaBeanToXml);
System.out.println(xml);
}
}
测试结果
测试1:
JaBeanToXml{name='wangkecheng', address='上海', age=27}
测试2:
<root><xmlname>wangkecheng</xmlname><xmladdress>上海</xmladdress><xmlage>28</xmlage></root>
源码仓库地址:https://github.com/nn-kc/utils.git
javabean 和 xml 互转的更多相关文章
- json、javaBean、xml互转的几种工具介绍
json.javaBean.xml互转的几种工具介绍 转载至:http://blog.csdn.net/sdyy321/article/details/7024236 工作中经常要用到Json.Jav ...
- JavaBean与xml互转的方法详解
本文实例讲述了Jaxb2实现JavaBean与xml互转的方法.分享给大家供大家参考,具体如下: 一.简介 JAXB(Java Architecture for XML Binding) 是一个业界的 ...
- Jaxb2实现JavaBean与xml互转的方法详解
本文实例讲述了Jaxb2实现JavaBean与xml互转的方法.分享给大家供大家参考,具体如下: 一.简介 JAXB(Java Architecture for XML Binding) 是一个业界的 ...
- json、javaBean、xml互转的几种工具介绍 (转载)
工作中经常要用到Json.JavaBean.Xml之间的相互转换,用到了很多种方式,这里做下总结,以供参考. 现在主流的转换工具有json-lib.jackson.fastjson等,我为大家一一做简 ...
- Java Jaxb JavaBean与XML互转
1.Jaxb - Java Arcitecture for XML Binding 是业界的一个标准,是一项能够依据XML Schema产生Java类的技术. Jaxb2.0是Jdk1.6的组成部分. ...
- Jaxb2 实现JavaBean与xml互转
一.简介 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实 ...
- JAVA bean与XML互转的利器---XStream
最近在项目中遇到了JAVA bean 和XML互转的需求, 本来准备循规蹈矩使用dom4j忽然想起来之前曾接触过的XStream, 一番研究豁然开朗,利器啊利器, 下来就XStream的一些用法与大家 ...
- C#中另辟蹊径解决JSON / XML互转的问题
C#中另辟蹊径解决JSON / XML互转的问题 最近在一个POC的项目中要用到JSON和XML的相互转换, 虽然我知道很多类库如JSON.NET具备这种功能, 但是我还是另辟蹊径的使用Spider ...
- JavaBean转xml
JavaBean转xml的工具就是:XStream XStream的作用: XStream可以把JavaBean对象转换成XML!通常服务器向客户端响应的数据都是来自数据库的一组对象,当我们不能直接把 ...
随机推荐
- “一切都是消息”--MSF(消息服务框架)入门简介
“一切都是消息”--这是MSF(消息服务框架)的设计哲学. MSF的名字是 Message Service Framework 的简称,中文名称:消息服务框架,它是PDF.NET框架的一部分. 1,M ...
- oracle数据库备份、还原 (如何将Oracle 11g备份的dat文件导入到10g数据库里面)
如何将Oracle 11g备份的dat文件导入到10g数据库里面 解决方法: 导出的时候后面加上目标数据库的版本号 导出: 在SQL plus下执行:create or replace ...
- 移动端touch事件实现页面弹动--小插件
动手之前的打盹 说实话真的是好久没有更新博客了,最近一直赶项目,身心疲惫:最关键的是晚上还要回去上一波王者,实在是忙啊! 这周下来,清闲了些许,或许是因为要到国庆的缘故吧,大家都显得无精打采.俗话说的 ...
- 小米2017秋招真题——电话号码分身问题(Java版)
原题描述如下: 通过对各个数字对应的英文单词的分析,可以发现一些规律: 字母Z为0独占,字母W为2独占,字母U为4独占,字母X为6独占,字母G为8独占: 在过滤一遍0.2.4.6.8后,字母O为1独占 ...
- GCD XOR uvalive6657
GCD XORGiven an integer N, nd how many pairs (A; B) are there such that: gcd(A; B) = A xor B where1 ...
- ubuntu中使用usb-creator制作live usb
1.实验环境 ubuntu14.04 2.启动usb-creator 2.1 单击桌面左上角的搜索图标,输入usb-creator,然后选择“应用程序"中的”启动盘创建器“ 2.2 终端中输 ...
- JavaScript 版数据结构与算法(四)集合
今天,我们要讲的是数据结构与算法中的集合. 集合简介 什么是集合?与栈.队列.链表这些顺序数据结构不同,集合是一种无序且唯一的数据结构.集合有什么用?在 Python 中,我经常使用集合来给数组去重: ...
- scala 读取文件遇到encode问题(Mac -> remote Linux)
Source.fromFile(fileName)(enc: Encode),如果遇到错误: java.nio.charset.MalformedInputException: Input lengt ...
- Java简单知识梳理
1. Java是单根继承结构:每个类都继承于Object类 ,这也就保证了每个对象都具备某些功能 2. Java类权限关键字: public -> protected -> default ...
- 使用Xshell5连接虚拟机VMware中安装的CentOS7系统
使用Xshell5连接VMware中安装的CentOS7系统 准备材料 Xshell 下载地址 VMware Workstation 12 Pro 下载地址 CentOS 7 64位系统 下载地址 安 ...