package com.joe.utilities.common.util; /** * <p>标题: Xml2Bean.java</p> * <p>功能描述: 用于将xml转换成bean<br> * * </p> * <p>版权: Copyright (c) 2007</p> * <p>公司: </p> * @author fbysss * @version 1.0 * * </p> * <p>修改记录:</p> * 创建时间:2007-6-23 13:19:39 * 类说明:要求jdk1.5版本以上。 */ import java.io.IOException; import java.io.StringReader; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import org.apache.commons.digester.Digester; import org.xml.sax.SAXException; public class Xml2Bean { public List getObjects(String xml,Object obj){ String beanName = obj.getClass().getSimpleName(); StringReader xmlReader = new StringReader(xml); Digester digester = new Digester(); digester.setValidating(true); digester.addObjectCreate("beans", ArrayList.class); digester.addObjectCreate("beans/"+beanName ,obj.getClass()); digester.addSetProperties("beans/"+beanName); addSetters(obj, beanName, digester); digester.addSetNext("beans/"+beanName, "add"); ArrayList beans = null; try { beans = (ArrayList) digester.parse(xmlReader); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } return beans; } /** *//*** * 一次性添加bean属性的Setter.否则就得一个一个的添加,很费劲。(也许digester有这个功能,但我没找到,只好自己写一个方法了) * @param obj * @param beanName * @param digester */ private void addSetters(Object obj,String beanName, Digester digester) { Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { digester.addBeanPropertySetter("beans/"+beanName+"/"+field.getName()); } /**//*digester.addBeanPropertySetter("beans/"+beanName+"/mid"); digester.addBeanPropertySetter("beans/"+beanName+"/mclass"); digester.addBeanPropertySetter("beans/"+beanName+"/mname"); */ } }