<?xml version="1.0" encoding="GBK"?> <message> <linkid>11215226486368967764</linkid> <spid>cmcc-2000</spid> <spcode>10662000</spcode> <feecode>LS</feecode> <feeprice>100</feeprice> <toicp>123</toicp> <product></product> <feecategory></feecategory> <channel></channel> <mobile></mobile> <content>短息内容</content> <isprovision></isprovision> <issubscribe></issubscribe> <createDate>2008-07-11 00:02:17</createDate> </message> /**泛型读取request post的XML文件,其中T符合java bean规范**/ package sharesoft; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import com.cn.BusinessFlow; public class ReceivePostXML <T> { private T t; public ReceivePostXML(InputStream is){ this.is = is; } public ReceivePostXML(){ } public T readXMLLinton(HttpServletRequest request, HttpServletResponse response,Object object){ Document doc = null; Element root; BufferedReader br; T t = (T) object; try { FileReader fr=new FileReader("WebRoot/WEB-INF/hell.xml");//测试时使用 //doc=new SAXBuilder().build(request.getReader());//创建Document对象,是具有xml格式的文件 doc=new SAXBuilder().build(fr);//测试时使用 root=doc.getRootElement();//返回根节点 System.out.println(t.getClass().toString()); PropertyDescriptor[] pd=Introspector.getBeanInfo(object.getClass()).getPropertyDescriptors(); //Introspector.getBeanInfo(t.getClass())反射机制得到javabean的属性和公开方法 //BeanInfo.getPropertyDescriptors()得到JavaBean的所有属性 //PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。属性名和值 for(PropertyDescriptor p:pd){ String fieldName=p.getName(); String fieldValue; if((fieldValue=root.getChildText(fieldName))!=null){//如果子节点的值不为空则执行 ,与此节点相同名字的JavaBean属性,通过一个存储器方法赋值 Method m=p.getWriteMethod(); m.setAccessible(true); try{ m.invoke(t, fieldValue); System.out.println("fieldValue: "+fieldValue); }catch(Exception e){ e.printStackTrace(); } } } } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IntrospectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return (T) t; } public static void main(String[] args) throws FileNotFoundException { FileReader fr=new FileReader("WebRoot/WEB-INF/hell.xml"); HttpServletRequest request = null; HttpServletResponse response = null; LinktoneMR businessFlow = new LinktoneMR(); new ReceivePostXML<LinktoneMR> ().readXMLLinton(request, response,businessFlow); } } } T是个JavaBean例如: package sharesoft; public class LinktoneMR { private int id; private String msgid="";// private String linkid=""; // private String statestr="";// private String mobile=""; // private String createDate="";// public int getId() { return id; } public void setId(int id) { this.id = id; } public String getMsgid() { return msgid; } public void setMsgid(String msgid) { this.msgid = msgid; } public String getLinkid() { return linkid; } public void setLinkid(String linkid) { this.linkid = linkid; } public String getStatestr() { return statestr; } public void setStatestr(String statestr) { this.statestr = statestr; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getCreateDate() { return createDate; } public void setCreateDate(String createDate) { this.createDate = createDate; } } xml 如下只有一个节点 <?xml version="1.0" encoding="GBK"?> <message> <linkid>11215226486368967764</linkid> <spid>cmcc-2000</spid> <spcode>10662000</spcode> <feecode>LS</feecode> <feeprice>100</feeprice> <toicp>123</toicp> <product></product> <feecategory></feecategory> <channel></channel> <mobile></mobile> <content>短息内容</content> <isprovision></isprovision> <issubscribe></issubscribe> <createDate>2008-07-11 00:02:17</createDate> </message>