`
oklook249900241
  • 浏览: 26880 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Betwixt适用分析

阅读更多

 

功能说明

提供了将 beans 转换成 XML 的方法

 

需要的包

commons-collections-3.2.jar

commons-logging-1.0.4.jar

commons-beanutils-1.8.0-BETA.jar

说明

betwixt也可以将xml转化成为bean ,功能上和commons- digester相同,实际上它也只是对commons-digester进行了一个包装和扩展,因此如果需要"xml转化成为bean",则需要 commons-digester-1.8.jar,这个jar放到not nessary文件夹下

 

实例一(example1)

实现功能

把下面这个java类转化成为xml文件

转化结果形为:

     代码部分:

       <?xml version='1.0' encoding='GB2312' ?>

           < 最外层包装 >

             < 一个 BeanJava 对象 这个配置文件中定义的值 ="1.0" String 类型对象 ="aaa" >

               <int 类型对象 >12</int 类型对象 >

               <ArrayList 类型对象 >

                 <ArrayList 中的值 >al1</ArrayList 中的值 >

                 <ArrayList 中的值 >al2</ArrayList 中的值 >

               </ArrayList 类型对象 >

               <Map 类型对象 >

                 <Map 中的值 >

                   <key>key2</key>

                   <value>value2</value>

                 </Map 中的值 >

                 <Map 中的值 >

                   <key>key1</key>

                   <value>value1</value>

                 </Map 中的值 >

               </Map 类型对象 >

             </ 一个 BeanJava 对象 >

           </ 最外层包装 >

 

         // 定义一个 Writer

        StringWriter outputWriter = new StringWriter();

        outputWriter.write( " /n" ); //xml 的头

        outputWriter.write( "< 最外层包装 >/n" );//

         // 定义一个 BeanWriter

        BeanWriter beanWriter = new BeanWriter(outputWriter);

/**************** 下面是一些属性设定项 , 都不是必须的 **********************/

         // 是否禁止 id 属性 (id 属性是 betwixt 自动添加的 )

        beanWriter.getBindingConfiguration().setMapIDs(false );

//         当遇到 ArrayList 或者 Map 时做一个包装

        beanWriter.getXMLIntrospector().getConfiguration().setWrapCollectionsInElement(true );

         // 是否以 attribute 的形式显示简单的 id

    beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false );

         // 每行结束时用什么字符 , 这里用一个换行符

        beanWriter.setEndOfLine("/n" );

         // 是否以缩进方式显示

        beanWriter.enablePrettyPrint();

         // 如果是 null 就写一个空值

        beanWriter.setWriteEmptyElements(false );

/********************* 属性设定项完毕 *********************************/

ArrayList al=new ArrayList();

al.add("al1" );

al.add("al2" );

 

Map map=new HashMap();

map.put("key1" , "value1" );

map.put("key2" , "value2" );

// 定义 BeanJava

BeanJava bj1=new BeanJava("aaa" ,12,al,map);

//        beanWriter.write("bjg", bj1);//javabean 转化成为了 XML, 这个方法自定义顶层元素名字

         beanWriter.write(bj1); //javabean 转化成为了 XML, 用默认的

        outputWriter.write( "最外层包装 >" );

 

说明:

  1. 这个目录下有个 BeanJava.betwixt 文件 , 定义了 xml 文件的显示方式 , 文件命名必须和类文件 BeanJava 同名 .
  2. 这个文件不是必须的 , 如果没有 , 则显示成下面的形式

 

  <BeanJava>

    <a_s>aaa</a_s>

    <b_i>12</b_i>

    <c_al>

      <String>al1</String>

      <String>al2</String>

    </c_al>

    <d_map>

      <entry>

        <key>key2</key>

        <value>value2</value>

      </entry>

      <entry>

        <key>key1</key>

        <value>value1</value>

      </entry>

    </d_map>

</BeanJava>

 

 

 

 

 

 

可以看到 , 它是按照属性名来定义根节点的

3 BeanJava.betwixt 文件

 

 

        

 

 

 

  

<info primitiveTypes="attribute">

    <element name=' 一个 BeanJava 对象 '>

       <attribute name=' 这个配置文件中定义的值 ' value='1.0'/>

        <attribute name='String 类型对象 ' property='a_s'/>

        <element name='int 类型对象 ' property='b_i'>

        </element>

      

       <element name='ArrayList 类型对象 '>

           <element name='ArrayList 中的值 ' property='c_al'/>

        </element>

 

       <element name='Map 类型对象 '>

           <element name='Map 中的值 '  property='d_map'>

           </element>

        </element>

      

    </element>

</info>

 

 

        

 

 

实例二(example2)

功能

实例一实现了一个普通的 javabean 的映射 , 在实际开发中 , 会碰到一个类中的属性是另一个自定义类的情况 , 实际上过程是一样的 .

把father转化为形如如下的xml:

    

 

代码

 

      * <?xml version='1.0' encoding='GB2312' ?>

             < 父亲 >

               < 姓名 > GG </ 姓名 >

               < 孩子 >

                 < 性别 > male </ 性别 >

                 < 年龄 > 12 </ 年龄 >

                 < 成绩 > 100 </ 成绩 >

               </ 孩子 >

             </ 父亲 >

 

        Child c=new Child("male" ,12,"100" );

        Father f=new Father("GG" ,c);

        

        StringWriter outputWriter = new StringWriter();

        outputWriter.write( " /n" ); //xml 的头

        BeanWriter beanWriter = new BeanWriter(outputWriter);

         /********* 下面是一些属性设定项 , 都不是必须的 **********************/

         // 是否禁止 id 属性 (id 属性是 betwixt 自动添加的 )

        beanWriter.getBindingConfiguration().setMapIDs(false );

         // 每行结束时用什么字符 , 这里用一个换行符

        beanWriter.setEndOfLine ("/n" );

         // 是否以缩进方式显示

        beanWriter.enablePrettyPrint();

         /********** 属性设定项完毕 ******************************/

        beanWriter.write(f); //javabean 转化成为了 XML, 用默认的

 

 

betwixt 问题

在实际应用中,会有先 xml 配置文件,后 javabean 映射的情况。举个例子

 

<xx>

    <parameter name="key1">value1</parameter>

    <parameter name="key2">value2</parameter>

<parameter name="key3">value3</parameter>

<parameter name="key4">value4</parameter>

</xx>

 

 

 

 

 

上面的 value1 是从 map 取出来的。如果我们用 betwixt ,最后生成的只会是

 

<entry>

        <key>key2</key>

        <value>value2</value>

      </entry>

 

 

 

 

。要想达到value4 的效果,唯一变通方法是建立一个

class MapBeanInn {

    public Object keyBetwixt ;

    public Object valueBetwixt ;

     …… 省略 setter/getter 方法

    

}

 

这样做坏处是:增加代码混乱度,降低维护性;破坏了 xml-javabean 映射的 javabean pojo 封装。 Betwixt 文档很少,打开 Log ,直接看源码。

 

|2009-07-22 11:41:07,349|DEBUG-[Could not find betwixt file HashMap$Entry.betwixt ]-[commons.betwixt.XMLIntrospector.findByXMLDescriptor,1270]

 

看到由于 Could not find betwixt file HashMap$Entry.betwixt ,因此没有解析 HashMap$Entry

commons.betwixt.XMLIntrospector.findByXMLDescriptor,1270 看看

 

protected synchronized XMLBeanInfo findByXMLDescriptor( Class aClass ) {

// trim the package name

String name = aClass.getName();

int idx = name.lastIndexOf( '.' );

if ( idx >= 0 ) {

name = name.substring( idx + 1 );

}

name += ".betwixt" ;

 

URL url = aClass.getResource( name );

得到 url=null

 

可以再后面加段代码试试

/*

* gaoling 添加!

*/

if (url==null )

        url=new URL("file:/D:/WorkSpace/eclipseWorks/workspace3/Betwixtt/bin/com/gaoling/test6/" +name);

 

src 下建立 HashMap$Entry.betwixt

 

 

 

 

 

 

解析成功! 再前后翻翻代码,会发现 betwixt 解析 . Betwixt 文件时

直接去处理 xxx 了,不会继续分析你是否有拆分请求,也就是说,如果想通过

 

<element name='HASHMAP' property=’xxx’> 直接去处理 xxx 了,不会继续分析你是否有拆分请求,也就是说,如果想通过

<element name='HASHMAP' property=’ 某个 hashmap 属性 ’>

    <text property=' 某个 hashmap 属性 .key'/>

<attribute name='name' property=' 某个 hashmap 属性 .value'/>

</element>

 

 

 

 

 

这样的配置来得到 <parameter name="key4">value4</parameter>

是不可行的!

Betwixt 的硬伤。

Castor 这个大炮可以解决需求。

 

轉載來自:http://blog.csdn.net/gaolingep/article/details/4369962

<!--EndFragment-->

分享到:
评论

相关推荐

    betwixt文件解析bai

    通过分析这个测试用例,可以深入理解Betwixt的工作原理和实际应用。 总结来说,Betwixt是一个强大的工具,它简化了Java应用程序与XML数据交互的过程。通过自动化对象-XML的映射,开发者可以更专注于业务逻辑,而...

    XML操作之betwixt

    Betwixt是Apache软件基金会的一个项目,它提供了一个简单而直观的方式来映射XML文档到Java对象,以及将Java对象转换回XML。通过使用Betwixt,开发者可以轻松地在XML与Java对象之间进行数据交换,简化了XML处理的复杂...

    betwixt详细使用说明

    Betwixt 是一个开源的 Java 库,它主要用于将 Java 对象(beans)转换为 XML 文档,并且可以反向将 XML 文档转换回 Java 对象。这个库是 Apache Commons 项目的一部分,旨在简化对象与 XML 之间的映射过程。在本文中...

    xml操作之betwixt实例

    **XML操作之Betwixt实例** XML(Extensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java开发中,处理XML时,Betwixt是一个非常有用的库,它由Apache软件...

    commons-betwixt-0.8的相关文件

    Apache Commons Betwixt 是一个Java库,它提供了一种方式来映射XML文档到Java对象,反之亦然。这个库使得开发人员可以方便地在XML数据和Java对象之间进行转换,大大简化了数据交换和序列化的过程。"commons-betwixt-...

    xstream和betwixt对xml、object的互转

    为了方便地将Java对象与XML进行转换,开发者常常使用一些库,如XStream和Betwixt。这两个工具都提供了简单易用的API,帮助我们实现XML到对象(Object-to-XML)和对象到XML(XML-to-Object)的转换。 **XStream** ...

    java使用commons-betwixt 实现bean与xml互转

    Java中的Apache Commons Betwixt库提供了一个简单的方法来映射Java Bean对象和XML文档之间的数据,使得在处理数据交换时能轻松地实现bean到XML的转换和XML到bean的反转换。本篇文章将深入探讨如何使用Commons ...

    使用betwixt进行xml与java类之间的互转解析--代码

    通过分析和运行这些示例,你可以更深入地了解Betwixt的用法和功能。 总之,Betwixt是一个强大的工具,它简化了Java开发者处理XML的工作。通过自动映射XML结构和Java类,它可以提高开发效率,使XML数据的处理变得...

    commons-betwixt-0.8.rar源文件及jar包

    Apache Commons Betwixt 是一个Java库,它提供了一种简单的方式来映射对象到XML以及从XML反向映射回对象。这个库是基于Apache软件基金会的Jakarta Commons项目,旨在简化XML数据绑定任务,使得开发者可以专注于业务...

    commons-betwixt-0.5-src.zip_ObjectStringConvert_commons-betwixt_

    Betwixt的工作原理是通过分析JavaBean的公共属性来生成XML表示,同时也能够根据XML文档的结构实例化相应的Java对象。这种映射机制使得开发者无需手动编写大量的XML解析和序列化代码,降低了出错的可能性,也提高了...

    commons-betwixt-0.8.jar

    commons-betwixt-0.8.jar

    betwixt互相转换JavaBean和XML(含代码和jar包)

    本资料用于JavaBean和XML之间相互转换,所用到的关于betwixt的包都在内。方法写在textXml中,由于默认的方法较为简单,且有局限性,所以本资料主要侧重从自定义的配置文件中转换xml或者生成javaBean.有兴趣的朋友...

    使用Betwixt将XML转为JAVA Bean(内有JAR包)

    它通过分析Java类的结构来生成XML,或者根据XML的结构来创建Java对象实例。在处理相同节点名的情况下,Betwixt允许我们通过属性名和类型来区分不同的节点。 以下是一个简单的Java Bean示例: ```java public class...

    betwixt技术

    通过分析这个文件,我们可以学习如何在实际项目中应用Betwixt。 在实际开发中,Betwixt的一个主要优点是减少了处理XML时的手动编码工作,提高了开发效率。然而,相比于现代的XML绑定库,如JAXB或Jackson,Betwixt的...

    betwixt, 在 Chrome DevTools网络面板上,基于Web调试代理.zip

    betwixt, 在 Chrome DevTools网络面板上,基于Web调试代理 Betwixt将帮助你使用熟悉的Chrome DevTools接口来分析浏览器外部的网络流量。 安装从你的操作系统下载最新版本,构建你自己的包或者从源代码运行Betwixt...

    Node.js-Betwixt-基于ChromeDevTools网络面板的Web调试代理

    Betwixt - 基于 Chrome DevTools 网络面板的 Web 调试代理

    betwixt互相转换JavaBean和XML(含代码和jar包).rar

    本资料用于JavaBean和XML之间相互转换,所用到的关于betwixt的包都在内。方法写在textXml中,由于默认的方法较为简单,且有局限性,所以本资料主要侧重从自定义的配置文件中转换xml或者生成javaBean.有兴趣的朋友...

    Apache Commons API集合

    Apache CommonsAPI 集合:Commons-beanutils-1.7.0-API.chm, Commons-lang-2.2-API,Commons-logging-1.1-API,Commons-collections-3.2-API

    Betwixt:NET的简易补间库

    Betwixt-.Net简易补间库Betwixt是一种轻松的方法,可以在任何泛型类型之间进行轻松过渡,并提供强大的API。下载您可以在此处获得最新的存储库,或从“下载预编译的库文件。 您也可以使用Nuget获取此软件包! 对于x86...

    xml转换java对象

    Apache Commons Betwixt库提供了一种简单的方法来实现这个转换。 Apache Commons Betwixt是Apache软件基金会的一个项目,它提供了一个用于XML到Java对象绑定的工具。通过使用Betwixt,开发者可以轻松地将XML文档...

Global site tag (gtag.js) - Google Analytics