项目下载地址: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; } @Override public 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; } @Override public 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; } }
<?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>
项目下载地址:http://download.csdn.net/detail/afgasdg/4825666