Xml2Bean:为Webservice返回Collection准备的一个实用类
来源:互联网 发布:系统清理软件哪个好 编辑:程序博客网 时间:2024/05/18 02:00
作者:fbysss
msn:jameslastchina@hotmail.com
blog:blog.csdn.net/fbysss
声明:本文由fbysss原创,转载请注明出处
关键字:Webservice,Xml2Bean
背景:Webservice 返回的是xml,如何得到Collection类型呢?最简单的方式就是把xml还原成Collection。
准备包:commons-digester-1.8.jar
源代码1:Xml2Bean
package cn.edu.ustb.db.task.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;
import cn.edu.ustb.db.task.po.Manager;
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");
*/
}
public static final void main(String args[])...{
Xml2Bean x2b = new Xml2Bean();
String xml = "<?xml version='1.0' ?> <beans><Manager> <mclass>1</mclass> <mid>1</mid><mname>sss</mname></Manager> <Manager><mclass>2</mclass><mid>1</mid><mname>sss2</mname></Manager></beans>";
List lst = x2b.getObjects(xml, new Manager());
for (Object object : lst) ...{
Manager manager = (Manager) object;
System.out.println("id:"+manager.getMid()+",name:"+manager.getMname());
}
}
}
/** *//**
* <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;
import cn.edu.ustb.db.task.po.Manager;
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");
*/
}
public static final void main(String args[])...{
Xml2Bean x2b = new Xml2Bean();
String xml = "<?xml version='1.0' ?> <beans><Manager> <mclass>1</mclass> <mid>1</mid><mname>sss</mname></Manager> <Manager><mclass>2</mclass><mid>1</mid><mname>sss2</mname></Manager></beans>";
List lst = x2b.getObjects(xml, new Manager());
for (Object object : lst) ...{
Manager manager = (Manager) object;
System.out.println("id:"+manager.getMid()+",name:"+manager.getMname());
}
}
}
源代码2:Manager.java
package cn.edu.ustb.db.task.po;
import java.util.HashSet;
import java.util.Set;
public class Manager implements java.io.Serializable ...{
// Fields
private Integer mid;
private String mname;
private Integer mclass;
// Constructors
/** *//** default constructor */
public Manager() ...{
}
/** *//** minimal constructor */
public Manager(Integer mid) ...{
this.mid = mid;
}
/** *//** full constructor */
public Manager(Integer mid,String mname, Integer mclass) ...{
this.mid = mid;
this.mname = mname;
this.mclass = mclass;
}
// Property accessors
public Integer getMid() ...{
return this.mid;
}
public void setMid(Integer mid) ...{
this.mid = mid;
}
public String getMname() ...{
return this.mname;
}
public void setMname(String mname) ...{
this.mname = mname;
}
public Integer getMclass() ...{
return this.mclass;
}
public void setMclass(Integer mclass) ...{
this.mclass = mclass;
}
}
import java.util.HashSet;
import java.util.Set;
public class Manager implements java.io.Serializable ...{
// Fields
private Integer mid;
private String mname;
private Integer mclass;
// Constructors
/** *//** default constructor */
public Manager() ...{
}
/** *//** minimal constructor */
public Manager(Integer mid) ...{
this.mid = mid;
}
/** *//** full constructor */
public Manager(Integer mid,String mname, Integer mclass) ...{
this.mid = mid;
this.mname = mname;
this.mclass = mclass;
}
// Property accessors
public Integer getMid() ...{
return this.mid;
}
public void setMid(Integer mid) ...{
this.mid = mid;
}
public String getMname() ...{
return this.mname;
}
public void setMname(String mname) ...{
this.mname = mname;
}
public Integer getMclass() ...{
return this.mclass;
}
public void setMclass(Integer mclass) ...{
this.mclass = mclass;
}
}
- Xml2Bean:为Webservice返回Collection准备的一个实用类
- 为开发者准备的9个实用PHP代码片段
- 为开发者准备的9个实用PHP代码片段
- webservice 怎样返回一个自定义类
- 一个实用的类
- 各种实用的webservice
- 异步调用webservice返回responseXML为空的问题解决方案
- 当C++函数的返回类型为一个类时
- Struts2 返回一个为字符串的response
- Struts2 返回一个为字符串的response
- 如何返回一个为字符串的response
- 为前端开发者准备的 20 个实用的 HTML5 教程
- 16款为Web开发者准备的Chrome实用扩展推荐
- 一个实用的数据类
- 一个实用的mysql类
- 将DataRow 返回为一个实体类。
- webservice不能序列化接口问题,返回值为IList或者参数为接口的解决办法。
- webservice Xfire 调用 返回值类型为map时,数据为空的问题
- 引自高手的pageEncoding和ContentType区别
- Photoshop抠出复杂背景下的飞扬秀发
- test
- 往生咒(一)
- Mobile Search V2 released - Improved Navigation, Cache, Movie Searching, GPS, Traffic reporting and more!
- Xml2Bean:为Webservice返回Collection准备的一个实用类
- Wonderware InSQL and Incurity安装心得
- 采用DIV+CSS布局的好处
- 制作任务栏托盘程序(C#)
- 欢庆公司开通CSDN访问!
- IT时代想获取成功需有的十种能力
- 往生咒(二)
- “名字相同扰乱业务” 北京谷歌科技起诉谷歌搜寻引擎
- ChinaJoy亲历 九城VS盛大