功能说明
提供了将
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(
"最外层包装
>"
);
说明:
-
这个目录下有个
BeanJava.betwixt
文件
,
定义了
xml
文件的显示方式
,
文件命名必须和类文件
BeanJava
同名
.
-
这个文件不是必须的
,
如果没有
,
则显示成下面的形式
<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的工作原理和实际应用。 总结来说,Betwixt是一个强大的工具,它简化了Java应用程序与XML数据交互的过程。通过自动化对象-XML的映射,开发者可以更专注于业务逻辑,而...
Betwixt是Apache软件基金会的一个项目,它提供了一个简单而直观的方式来映射XML文档到Java对象,以及将Java对象转换回XML。通过使用Betwixt,开发者可以轻松地在XML与Java对象之间进行数据交换,简化了XML处理的复杂...
Betwixt 是一个开源的 Java 库,它主要用于将 Java 对象(beans)转换为 XML 文档,并且可以反向将 XML 文档转换回 Java 对象。这个库是 Apache Commons 项目的一部分,旨在简化对象与 XML 之间的映射过程。在本文中...
**XML操作之Betwixt实例** XML(Extensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java开发中,处理XML时,Betwixt是一个非常有用的库,它由Apache软件...
Apache Commons Betwixt 是一个Java库,它提供了一种方式来映射XML文档到Java对象,反之亦然。这个库使得开发人员可以方便地在XML数据和Java对象之间进行转换,大大简化了数据交换和序列化的过程。"commons-betwixt-...
为了方便地将Java对象与XML进行转换,开发者常常使用一些库,如XStream和Betwixt。这两个工具都提供了简单易用的API,帮助我们实现XML到对象(Object-to-XML)和对象到XML(XML-to-Object)的转换。 **XStream** ...
Java中的Apache Commons Betwixt库提供了一个简单的方法来映射Java Bean对象和XML文档之间的数据,使得在处理数据交换时能轻松地实现bean到XML的转换和XML到bean的反转换。本篇文章将深入探讨如何使用Commons ...
通过分析和运行这些示例,你可以更深入地了解Betwixt的用法和功能。 总之,Betwixt是一个强大的工具,它简化了Java开发者处理XML的工作。通过自动映射XML结构和Java类,它可以提高开发效率,使XML数据的处理变得...
Apache Commons Betwixt 是一个Java库,它提供了一种简单的方式来映射对象到XML以及从XML反向映射回对象。这个库是基于Apache软件基金会的Jakarta Commons项目,旨在简化XML数据绑定任务,使得开发者可以专注于业务...
Betwixt的工作原理是通过分析JavaBean的公共属性来生成XML表示,同时也能够根据XML文档的结构实例化相应的Java对象。这种映射机制使得开发者无需手动编写大量的XML解析和序列化代码,降低了出错的可能性,也提高了...
commons-betwixt-0.8.jar
本资料用于JavaBean和XML之间相互转换,所用到的关于betwixt的包都在内。方法写在textXml中,由于默认的方法较为简单,且有局限性,所以本资料主要侧重从自定义的配置文件中转换xml或者生成javaBean.有兴趣的朋友...
它通过分析Java类的结构来生成XML,或者根据XML的结构来创建Java对象实例。在处理相同节点名的情况下,Betwixt允许我们通过属性名和类型来区分不同的节点。 以下是一个简单的Java Bean示例: ```java public class...
通过分析这个文件,我们可以学习如何在实际项目中应用Betwixt。 在实际开发中,Betwixt的一个主要优点是减少了处理XML时的手动编码工作,提高了开发效率。然而,相比于现代的XML绑定库,如JAXB或Jackson,Betwixt的...
betwixt, 在 Chrome DevTools网络面板上,基于Web调试代理 Betwixt将帮助你使用熟悉的Chrome DevTools接口来分析浏览器外部的网络流量。 安装从你的操作系统下载最新版本,构建你自己的包或者从源代码运行Betwixt...
Betwixt - 基于 Chrome DevTools 网络面板的 Web 调试代理
本资料用于JavaBean和XML之间相互转换,所用到的关于betwixt的包都在内。方法写在textXml中,由于默认的方法较为简单,且有局限性,所以本资料主要侧重从自定义的配置文件中转换xml或者生成javaBean.有兴趣的朋友...
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是一种轻松的方法,可以在任何泛型类型之间进行轻松过渡,并提供强大的API。下载您可以在此处获得最新的存储库,或从“下载预编译的库文件。 您也可以使用Nuget获取此软件包! 对于x86...
Apache Commons Betwixt库提供了一种简单的方法来实现这个转换。 Apache Commons Betwixt是Apache软件基金会的一个项目,它提供了一个用于XML到Java对象绑定的工具。通过使用Betwixt,开发者可以轻松地将XML文档...