项目下载地址:http://download.csdn.net/detail/afgasdg/4825666
项目所需的jar包:
一、XML2BeanUtils.java工具类如下:
更多学习资料请访问 https://www.itkc8.com
[java] view plaincopy
- 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);
- }
- }
- }
二、简单的javabean对象:
[java] view plaincopy
- 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;
- }
- @Override
- public String toString() {
- return "PersonBean[name='" + name + "',age='" + age + "']";
- }
- }
[java] view plaincopy
- 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;
- }
- @Override
- public String toString() {
- return "User [userName=" + userName + ", age=" + age + ", person=" + person + ", hobbyList=" + hobbyList
- + ", personMap=" + personMap + ", hobbyArray=" + Arrays.toString(hobbyArray) + "]";
- }
- }
测试类:
[java] view plaincopy
- 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运行结果:
[html] view plaincopy
- <?xml version='1.0' ?>
- <PersonBean>
- <age>23</age>
- <name>name</name>
- </PersonBean>
PersonBean[name='name',age='23']
testUser运行结果:
[html] view plaincopy
- <?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=[篮球, 足球, 乒乓球, 羽毛球]]
更多学习资料请访问 https://www.itkc8.com