java使用commons-betwixt 实现bean与xml互转
来源:互联网 发布:linux打开文件数最大值 编辑:程序博客网 时间:2024/05/17 00:50
项目下载地址:http://download.csdn.net/detail/afgasdg/4825666
项目所需的jar包:
一、XML2BeanUtils.java工具类如下:
package com.viathink.core.utils;import java.beans.IntrospectionException;import java.io.IOException;import java.io.StringReader;import java.io.StringWriter;import org.apache.commons.betwixt.BindingConfiguration;import org.apache.commons.betwixt.IntrospectionConfiguration;import org.apache.commons.betwixt.expression.Context;import org.apache.commons.betwixt.io.BeanReader;import org.apache.commons.betwixt.io.BeanWriter;import org.apache.commons.betwixt.strategy.DecapitalizeNameMapper;import org.apache.commons.betwixt.strategy.DefaultObjectStringConverter;import org.apache.commons.betwixt.strategy.HyphenatedNameMapper;import org.xml.sax.SAXException;/** * Xml文件与javaBean对象互转工具类 * @author LiuJunGuang * @date 2012-11-21下午1:38:56 */public class XML2BeanUtils {private static final String xmlHead = "<?xml version='1.0' ?>";/** * 将javaBean对象转换成xml文件,对于没有设置的属性将不会生成xml标签 * @author LiuJunGuang * @param obj 待转换的javabean对象 * @return String 转换后的xml 字符串 * @throws IntrospectionException * @throws SAXException * @throws IOException * @date 2012-11-21下午1:38:53 */public static String bean2XmlString(Object obj) throws IOException, SAXException, IntrospectionException {if (obj == null)throw new IllegalArgumentException("给定的参数不能为null!");StringWriter sw = new StringWriter();sw.write(xmlHead);// 写xml文件头BeanWriter writer = new BeanWriter(sw);IntrospectionConfiguration config = writer.getXMLIntrospector().getConfiguration();BindingConfiguration bc = writer.getBindingConfiguration();bc.setObjectStringConverter(new DateConverter());bc.setMapIDs(false);config.setAttributesForPrimitives(false);config.setAttributeNameMapper(new HyphenatedNameMapper());config.setElementNameMapper(new DecapitalizeNameMapper());writer.enablePrettyPrint();writer.write(obj.getClass().getSimpleName(), obj);writer.close();return sw.toString();}/** * 将xml文件转换成相应的javabean对象,对于List,Map,Array转换时需要在需要保证Bean类中有单个添加方法</br> * <p><blockquote><pre> * 例如:List<{@link String}> userNameList --> addUserNameList(String username) * String[] items --> addItems(String item) * Map<String,User> userMap --> addUserMap(String key,User user) * </pre></blockquote></p> * 注意:<br> * 目前还没有找到好的方法解决Map与Map嵌套,List与List等嵌套的问题,使用时应当避免以上几种情况。 * @author LiuJunGuang * @param beanClass 待转换的javabean字节码 * @param xmlFile xml文件字符串 * @return 转换后的对象 * @throws IntrospectionException * @throws SAXException * @throws IOException * @date 2012-11-21下午1:40:14 */@SuppressWarnings("unchecked")public static <T> T xmlSring2Bean(Class<T> beanClass, String xmlFile) throws IntrospectionException, IOException,SAXException {if (beanClass == null || xmlFile == null || xmlFile.isEmpty())throw new IllegalArgumentException("给定的参数不能为null!");StringReader xmlReader = new StringReader(xmlFile);BeanReader reader = new BeanReader();reader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);BindingConfiguration bc = reader.getBindingConfiguration();bc.setObjectStringConverter(new DateConverter());bc.setMapIDs(false);T obj = null;reader.registerBeanClass(beanClass.getSimpleName(), beanClass);obj = (T) reader.parse(xmlReader);xmlReader.close();return obj;}/** * 日期转换,主要是解决日期为null或者空字符串解析报错问题 * @author LiuJunGuang * @date 2013年12月31日下午6:56:49 */private static class DateConverter extends DefaultObjectStringConverter {private static final long serialVersionUID = -197858851188189916L;@Override@SuppressWarnings("rawtypes")public String objectToString(Object object, Class type, String flavour, Context context) {return super.objectToString(object, type, flavour, context);}@Override@SuppressWarnings("rawtypes")public Object stringToObject(String string, Class type, String flavour, Context context) {if (string == null || "".equals(string))return null;return super.stringToObject(string, type, flavour, context);}}}
package com.aimilin;public class PersonBean {private String name;private int age;public PersonBean() {}public PersonBean(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "PersonBean[name='" + name + "',age='" + age + "']";}}
package com.aimilin;import java.io.Serializable;import java.util.Arrays;import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;public class User implements Serializable {private static final long serialVersionUID = 1354973253595584043L;private String userName;private int age;private PersonBean person;private List<String> hobbyList;private Map<String, PersonBean> personMap;private String[] hobbyArray;/** * 添加map类型属性的方法 * @param key * @param person * @date 2012-11-29下午1:01:06 */public void addPersonMap(String key, PersonBean person) {if (personMap == null) {personMap = new HashMap<String, PersonBean>();}personMap.put(key, person);}/** * 添加list类型的方法 * @param hobby * @date 2012-11-29下午1:01:07 */public void addHobbyList(String hobby) {if (hobbyList == null) {hobbyList = new LinkedList<String>();}hobbyList.add(hobby);}/** * 添加数组类型的方法 * @param hobby * @date 2012-11-29下午1:01:09 */public void addHobbyArray(String hobby) {hobbyArray = StringUtils.addStringToArray(hobbyArray, hobby);}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public User() {super();}public PersonBean getPerson() {return person;}public void setPerson(PersonBean person) {this.person = person;}public List<String> getHobbyList() {return hobbyList;}public void setHobbyList(List<String> hobbyList) {this.hobbyList = hobbyList;}public Map<String, PersonBean> getPersonMap() {return personMap;}public void setPersonMap(Map<String, PersonBean> personMap) {this.personMap = personMap;}public String[] getHobbyArray() {return hobbyArray;}public void setHobbyArray(String[] hobbyArray) {this.hobbyArray = hobbyArray;}@Overridepublic String toString() {return "User [userName=" + userName + ", age=" + age + ", person=" + person + ", hobbyList=" + hobbyList+ ", personMap=" + personMap + ", hobbyArray=" + Arrays.toString(hobbyArray) + "]";}}
测试类:
package com.aimilin;import java.util.Arrays;import java.util.HashMap;import java.util.Map;import org.junit.Test;public class XML2BeanUtilsTest {@Test//测试简单属性public void testPsersonBean() throws Exception {String xmlString = XML2BeanUtils.bean2XmlString(createPerson());System.out.println(xmlString);PersonBean person = XML2BeanUtils.xmlSring2Bean(PersonBean.class, xmlString);System.out.println(person);}@Test//测试复杂属性public void testUser() throws Exception {String xmlString = XML2BeanUtils.bean2XmlString(createUser());System.out.println(xmlString);User user = XML2BeanUtils.xmlSring2Bean(User.class, xmlString);System.out.println(user);}public PersonBean createPerson() {return new PersonBean("name", 23);}//创建复杂的用户对象public User createUser() {User user = new User();user.setAge(18);user.setUserName("张三");user.setHobbyArray(new String[] { "篮球", "足球", "乒乓球", "羽毛球" });user.setHobbyList(Arrays.asList(new String[] { "游泳", "蛙游", "蝶泳", "自由泳", "狗刨" }));user.setPerson(createPerson());Map<String, PersonBean> personMap = new HashMap<String, PersonBean>();for (int i = 0; i < 5; i++) {personMap.put("person" + i, new PersonBean("person" + i, i));}user.setPersonMap(personMap);return user;}}
结果:testPsersonBean运行结果:
<?xml version='1.0' ?> <PersonBean> <age>23</age> <name>name</name> </PersonBean>PersonBean[name='name',age='23']
testUser运行结果:
<?xml version='1.0' ?> <User> <age>18</age> <hobbyArray> <hobbyArray>篮球</hobbyArray> <hobbyArray>足球</hobbyArray> <hobbyArray>乒乓球</hobbyArray> <hobbyArray>羽毛球</hobbyArray> </hobbyArray> <hobbyList> <hobbyList>游泳</hobbyList> <hobbyList>蛙游</hobbyList> <hobbyList>蝶泳</hobbyList> <hobbyList>自由泳</hobbyList> <hobbyList>狗刨</hobbyList> </hobbyList> <person> <age>23</age> <name>name</name> </person> <personMap> <entry> <key>person3</key> <value> <age>3</age> <name>person3</name> </value> </entry> <entry> <key>person4</key> <value> <age>4</age> <name>person4</name> </value> </entry> <entry> <key>person1</key> <value> <age>1</age> <name>person1</name> </value> </entry> <entry> <key>person2</key> <value> <age>2</age> <name>person2</name> </value> </entry> <entry> <key>person0</key> <value> <age>0</age> <name>person0</name> </value> </entry> </personMap> <userName>张三</userName> </User>
User [userName=张三, age=18, person=PersonBean[name='name',age='23'], hobbyList=[游泳, 蛙游, 蝶泳, 自由泳, 狗刨], personMap={person3=PersonBean[name='person3',age='3'], person4=PersonBean[name='person4',age='4'], person1=PersonBean[name='person1',age='1'], person2=PersonBean[name='person2',age='2'], person0=PersonBean[name='person0',age='0']}, hobbyArray=[篮球, 足球, 乒乓球, 羽毛球]]
项目下载地址:http://download.csdn.net/detail/afgasdg/4825666
- java使用commons-betwixt 实现bean与xml互转
- java使用commons-betwixt 实现bean与xml互转
- 关于使用commons-betwixt组件实现xml信息-->Java Bean的转化的一些感受
- Commons Betwixt : Turning beans into XML
- Apache Commons系列之一:betwixt--JavaBean与XML互相转换的简单例子
- 使用Betwixt将javaBean生成xml
- Commons Betwixt应用
- apache commons betwixt笔记
- Apache Commons:Betwixt介绍
- Apache Commons Betwixt
- JAXB实现JAVA BEAN与XML之间的转换
- 使用Betwixt将javaBean生成xml 之二
- betwixt 解析XML
- xml 与bean 转换 java
- Apache Commons项目简介之Betwixt
- 关于Apache Commons Betwixt的简单例子!
- java bean与xml相互转换
- 使用JAXB类库实现JAVA对象与XML互转
- Volume 1. Elementary Problem Solving->Volume 1 String 409 - Excuses, Excuses!
- Cortex-M3 时钟
- sql server中用逗号分隔字符串,如何用like正确匹配
- .net 分布式事务
- Objective-C字符串详解
- java使用commons-betwixt 实现bean与xml互转
- 新手建站(二)
- C# Picturebox 刷新 Refresh()图像一闪而过
- 用Application保存变量 等
- Silicon F340 USB使用方法
- 网页布局之浏览器兼容问题
- (7)Intents
- vim下的各种插件
- 乔布斯初心与终点:疯子一样的不知妥协