当前位置:首页 > Java技术 > 正文内容

Xml2Bean:为Webservice返回Collection准备的一个实用类

canca17年前 (2008-09-24)Java技术427

作者: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());
        }
    }
   
}

源代码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;
    }
}

扫描二维码推送至手机访问。

版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

本文链接:https://iant.work/post/363.html

标签: Java技术
分享给朋友:

“Xml2Bean:为Webservice返回Collection准备的一个实用类” 的相关文章

对象序列化与反序列化

    序列化,并不是JAVA独有的。因此,在这里我用比较通俗的话说了。序列化就是把一个对象转换成有规则的二进制流。而反序列化就是把有规则的二进制数据重整成一个对象。其好处不难看见:1.可以把一个对象保存在一个文件里。例如,下载软件。当您关闭了软件,下次再打开...

Socket与ServerSocket的问题

//服务器端:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.ServerSock...

Java语言的反射机制

    由于项目的需要,在项目中要实现即插即用的方式,也就是说可以动态地加载包,不用设置CLASSPATH路径。当项目发布时,不可能要用户来设置环境变量吧!因此,就要用到JAVA的反射机制了。昨天,我是在研究JAVA的JNI技术。由于没有时间,所以过几天才写JNI。今天...

JSP与Servlet的对应关系

以前在QQzone写下的文章现在贴到这里来了... 最近比较忙啊!现在抽身写一篇文章。是关于JSP与Servlet的对应关系的。希望对大家有所帮助。其实我也是刚刚学的......-------Servlet--------------JSP----------1.ServletContext&nbs...

JAVA获得一个文件夹大小

在JAVA里没有现成的方法获取一个文件夹的大小,那么我们可以用递归的方法,获取文件夹的大小。    import  java.util.*;  import  java.io.*;  class  GetFileSi...

JAVA内部类终极实例

最近心情不好,不想说太多东西了!电脑坏了,我现在又病了. class ClassFactory{ private final static String userName = "Hello,My name is CAnca."; public static Thread in =...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。