首页 > 其他分享 >Xml2Bean:为Webservice返回Collection准备的一个实用类

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

时间:2023-09-04 16:06:22浏览次数:49  
标签:... Webservice beanName mid Collection digester beans Xml2Bean public


作者: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 versinotallow='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;
    }
}

标签:...,Webservice,beanName,mid,Collection,digester,beans,Xml2Bean,public
From: https://blog.51cto.com/u_16245757/7351671

相关文章

  • Java反序列化:CommonsCollections6调试分析
    JDK8u71大版本中AnnotationInvocationHandler.readObject被修改了,为了使得CC1能够利用,又造了一条CC6CC6解决的是CC1在高版本jdk上无法利用的问题这里搬一下web佬Boogipop的整理图:环境搭建JDK测试版本:JDK11基础知识1.CC1和CC6的恶意代码执行触发链再来捋顺一下这条恶......
  • 断言Assert.assertEquals(sourceCollection.get(0).getDemoValue(),1);
    Assert.assertEquals(sourceCollection.get(0).getDemoValue(),1);这段代码的作用是验证集合中第一个元素的demoValue属性是否等于预期的值1。如果相等,就没有问题;如果不相等,会抛出异常,表明测试失败或代码出现了问题。......
  • WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单
       现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了这样的业务要求,需要在.net开发的客户端系统中访问java开发的web系统,这样的业务需求自然需要通过WebService进行信息数据的操作。下面就将我们在开发中摸索的一点经验教训总结以下,以供大家参考.......
  • WebService开发笔记 3 -- 增强访问 WebService 的安全性
    在WebService开发笔记1中我们创建了一个WebService简单实例,下面我们通过一个简单的用户口令验证机制来加强一下WebService的安全性:1.修改WebService服务端spring配置文件ws-context.xml<beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi=......
  • WebService开发笔记 2 -- VS 2005 访问WebServcie更简单
    在上一回中我们创建了一个WebService服务(WebService开发笔记1--利用cxf开发WebService竟然如此简单),下面就来作一个跨平台访问WebServcie服务的例子....下面将在vs2005中通过c#.net访问我们创建好的WebService服务,C#.net第一次用,TNN的没想到这么简单,MS就是MS,不服不行。1.......
  • 一次搞定:借助Hutool封装代码快速解决webservice调用烦恼
    前言相信很多同行哪怕学了许多主流技术,但工作上依然免不了和传统企业打交道,而这样的企业往往还在用webservice做接口交互。本文是作者近两年和医疗行业的厂家打交道研究出来的一点调用webservice接口的心得,代码在生产环境也用了挺久了,专门捞出来作为一期干货分享给大家。......
  • ios开发之--UICollectionView的使用
    最近项目中需要实现一种布局,需要用到UICollectionView,特在此整理记录下!贴上最终实现的效果图: 1,声明@interfaceFirstViewController()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>@property(nonatomic,strong)UICollectionView*m......
  • Java Collection集合体系
    Collection集合体系Collection集合常见方法List集合遍历方式什么是迭代器ArrayList集合底层LinkedList集合底层Set集合HashSet集合底层LinkedHashSet底层TreeSet底层......
  • .net【C#】调用 webservice
    【C#】调用webservice的三种方法总结 WebService,WCF,WebApi区别与特点......
  • MyBatis resultMap中collection过滤空字段
    在使用MyBatis查询数据时,返回值可以定义为resultMap。如果返回的对象中有列表,还可以使用collection标签进行定义。此时,如果不想某些字段为空的数据加入列表,可以使用notNullColumn属性进行定义:<resultMapid="resultMapDemo"type="返回值类型"><idproperty="id"column=......