xstream的Converter的使用

在网上看了下,有关xstream的Converter的使用的例子很少,这里做个简单的应用举例

文件格式如下:

<list>
      <mapper neType="2g">
           <sqlByType></sqlByType>
           <sqlById></sqlById>
           <types>
                   <include>BTS</include>
           </types>
      </mapper>
      <mapper neType="3g">
            <types>
                  <include>NODEB</include>
            </types>
      </mapper>
</list>

实体类定义如下:

@XStreamAlias("mapper")
public class NeTypeMapper {
         @XStreamAsAttribute
         public String neType ;
 
         @XmlElement
         public String sqlByType ;
 
         @XmlElement
         public String sqlById ;
 
         @XStreamAlias("types")
         public List<String> includeTypes = new ArrayList<String>();
}

转换器:


static class ListConverter extends AbstractCollectionConverter {

public ListConverter(Mapper mapper) {
                    super(mapper);
          }

@Override
          public boolean canConvert(Class type) {
                   return type.equals(ArrayList.class);
           }

@Override
          public void marshal(Object source, HierarchicalStreamWriter writer,
                       MarshallingContext context) {
                 List<String> list = (List<String>)source;  
                 ListIterator<String> iter = list.listIterator() ;
                 String value = null ;
                 while(iter.hasNext()){
                       value = iter.next() ;
                       ExtendedHierarchicalStreamWriterHelper.startNode(writer,"include",List.class); 
                       writer.setValue(value); 
                       writer.endNode(); 
            }
  }

@Override
  public Object unmarshal(HierarchicalStreamReader reader,
        UnmarshallingContext context) {
                String nodename = reader.getNodeName() ;
                //System.out.println(nodename);
                List<String> list = new ArrayList<String>();
                while(reader.hasMoreChildren()){
                         reader.moveDown();
                      nodename = reader.getNodeName() ;
                      //System.out.println(nodename+"-->"+reader.getValue());
                      list.add(reader.getValue()) ;
                      reader.moveUp();
                 }
                 return list;
        }
 }

使用方式:

   XStream xs = new XStream() ;
   xs.processAnnotations(NeTypeMapper.class);
   xs.registerLocalConverter(NeTypeMapper.class, "includeTypes",
          new ListConverter(
                    new DefaultMapper(XStream.class.getClassLoader())) );
    File file = new File(filePath) ;  //filePath:文件的路径
    try {
    List<NeTypeMapper> list = (List<NeTypeMapper>)xs
                            .fromXML(new FileInputStream(file)) ;
时间: 2024-10-11 07:53:07

xstream的Converter的使用的相关文章

xstream读取xml

xStream可以Java和xml相互转换.下面主要说明xstream读取xml文件(和xstream将Java转化成xml差不多).本次学习用到的是xstream1.4.7 项目中使用到的xml文件 <config name="personconfig"> <!-- <add> --> <!-- 使用addImplicitCollection可以不出现 --> <address> <add>abc;abc<

xStream完美转换XML、JSON

xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 它们都完美支持JSON,但是对xml的支持还不是很好.一定程度上限制了对Java对象的描述,不能让xml完全体现到对Java对象的描述.这里将会介绍xStream对JSON.XML的完美支持.xStream不仅对XML的转换非常友好,而且提供annotation注解,可以在JavaBean中完成对xml节点.属性的描述.以及对JSON也支持,只需要提供

X-stream完美转换XML、JSON

一.准备工作 1. 下载jar包.及官方资源 xStream的jar下载地址:https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/xstream-distribution/1.3.1/xstream-distribution-1.3.1-bin.zip 官方的示例很全,官方参考示例:http://xstream.codehaus.org/tutorial.html 添加xstream-

使用XStream注解实现Java对象与XML互相转换的代码示例

本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例.    我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件.如:jdom.dom4j等.虽然他们的功能非常强大,但在使用上还是有点不那么习惯.对于格式比较固定的XML文档,它的结构没有变化或是很少变化,这时将它转换成我们熟悉的Java对象来操作的话,会使工作变得更容易一些,而xstream正好可以满足这一点.    本文所用xstream的版本为:1.4.7 <dependency>

xStream完美转换XML、JSON(转)

xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html 以及Jackson这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html 它们都完美支持JSON,

使用XStream是实现XML与Java对象的转换(6)--持久化

九.持久化 在第八节的示例中,当我们操作一组对象时,我们可以指定Writer.OutputStream来写出序列化后的XML数据,我们还可以指定Reader.InputStream来读取序列化后的XML数据.当我们需要写出和读取文件时都需要指定输入输出流,并且需要明确的调用输入输出方法来实现Java对象的序列化和反序列化,其实我们完全可以让Java对象的序列化和反序列化操作隐性的.自动的完成,这就是我们要学的内容:PersistenceStrategy.XmlArrayList.XmlMap和X

Bootstrap嵌入jqGrid,使你的table牛逼起来

Bootstrap原生的table组件只能满足简单的数据展示,满足不了更富有操作性的要求.当然了,你可以找到一款叫做"DataTables-1.10.11"的基于bootstrap的table组件,但如果你对API看得不甚了解的话,用起来可就痛苦了,但是如果你选择使用jqGrid,那么本篇教程就给你带来了解决这种富操作性table的解决方案. 一.效果展示 OK,就展示这一张图片,相信你已经爱上了bootstrap版的jqGrid,和bootstrap很兼容,简直完美,当然了,这需要我

Xtream技术指南

xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 一.准备工作 1. 下载jar包.及官方资源 xStream的jar下载地址: https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/xstream-distribution/1.3.1/xstream-distribution-1.3.1-b

一旦手把手教你开发微信公众平台2

目录: 前言 回顾 本节内容 准备工作 开发喽 公共部分 微信服务器发送的xml解析weChatUtils编写 控制器编写 实体补全 总结 前言 最近忙于毕业设计,更新慢,希望大家见谅. 回顾 上一节我讲了如何申请微信公众平台测试账号.配置接口信息.搭建了开发环境,并且初步实现了微信服务器消息的验证. 本节内容 实现了微信的消息验证之后,需要注意的是,每次微信服务器发送消息过来的时候,我们都需要进行验证,避免有不法分子冒充微信平台恶意发送消息. 本节将会继续讲解,主要内容是消息接收. 准备工作