- 浏览: 582905 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (174)
- JBPM (3)
- WWF (0)
- JavaScript (11)
- J2EE (40)
- OperationSystem (11)
- 数据库 (12)
- CSS (1)
- Ajax (2)
- J2SE (30)
- Tools (10)
- 服务器中间件 (3)
- 异常 (0)
- Flex (5)
- jQuery (11)
- html (9)
- Ejb (1)
- HTML5 Shiv–让该死的IE系列支持HTML5吧 (1)
- Spring (9)
- Quartz (3)
- log4j (1)
- maven (1)
- cpdetector (1)
- JSON (1)
- log4jdbc (1)
- asm (8)
- FusionCharts (1)
- jqplot (1)
- highcharts (1)
- excanvas (1)
- html5 (1)
- jpcap介绍 (1)
- weblogic (3)
- URLURLClassLoader (0)
- URLClassLoader (1)
- ant (2)
- ivy (2)
- nexus (1)
- IT (0)
- LoadRunner (1)
- SCSS (1)
- ruby (1)
- webstorm (1)
- typescript (1)
- Jboss7 (1)
- wildfly (1)
- oracle (5)
- esb (0)
- dubbo (2)
- zookeeper (3)
- eclipse (1)
- Android (2)
- Studio (1)
- Google (1)
- 微信 (1)
- 企业号 (1)
- Linux (13)
- Oracle12c (1)
- Hadoop (1)
- InletexEMC (1)
- Windows (1)
- Netty (3)
- Marshalling (2)
- Protobuf (1)
- gcc (1)
- Git (1)
- GitLab (1)
- shell (2)
- java (3)
- Spring4 (1)
- hibernate4 (1)
- postgresql (1)
- ApacheServer (2)
- Tomcat (2)
- ApacheHttpServer (2)
- realvnc (1)
- redhat (7)
- vncviewer (1)
- LVS (4)
- LVS-DR (1)
- RedHat6.5 (5)
- LVS-NAT (1)
- LVS-IPTUNNEL (2)
- LVS-TUN (1)
- keepalived (2)
- yum (1)
- iso (1)
- VMware (1)
- redhat5 (1)
- ha (1)
- nginx (2)
- proguard (1)
- Mat (1)
- DTFJ (1)
- axis2 (1)
- web service (1)
- centos (1)
- random (1)
- urandom (1)
- apache (1)
- IBM (1)
- cve (1)
- 漏洞 (1)
- JDBC (1)
- DataSource (1)
- jdk (1)
- tuxedo (2)
- wtc (1)
最新评论
-
skying007:
好资料,谢谢分享给啊
FusionCharts在服务器端导出图片(J2EE版) -
cgnnzg:
大神好 可以发一份源码给我学习么 多谢了 978241085 ...
springmvc+dubbo+zookeeper -
jifengjianhao:
求源码:854606899@qq.com
springmvc+dubbo+zookeeper -
wdloyeu:
shihuan8@163.com邮箱网盘在哪,没找到。能给份源 ...
Java Socket长连接示例代码 -
huangshangyuanji:
求代码:45613032@qq.com
springmvc+dubbo+zookeeper
环境:
commons-betwixt-0.8.jar和commons-digester-2.1.jar(这个地方digester的jar包可以是1.8版本,但千万不能是3.0版本的)
java-version-5.0
commons-betwixt对带有集合javabean转换的约定:
1、集合属性的名字要以集合元素类的名字开头(大小写不敏感);
2、每个Bean都必须有一个不带参数的构造方法。或者bean不要写任何构造方法(这样实际上有一个默认的不带参数的构造方法)。
3、每个对于包含其他Bean集合的Bean,要有一个addXxxBean(XxxBean bean)的方法,只有这样,才能保证将xml转换为java的时候,集合属性不丢失。
例子:一个人Person可以有多个宠物Pet,现在创建一个Person,将其转换为XML,然后做个逆转。
Pet.java代码:
Person.java代码:
TestBetwixt.java代码:
运行结果:
看到了吧,双向转换成功了。
但是修改下petList属性的名字,修改下getPetList、setPetList的名字,去掉默认的构造方法,使得不符合上面的约定原则,双向转换就失败了。
另外,经过commons-betwixt还有一个问题,就是在将xml转Java过程中,如果日期数据元素为空,则导致转换失败。解决办法是,将java转xml的时候,设置忽略空元素beanWriter.setWriteEmptyElements(false);,在将xml转java 的时候,空日期元素删除掉即可。
commons-betwixt-0.8.jar和commons-digester-2.1.jar(这个地方digester的jar包可以是1.8版本,但千万不能是3.0版本的)
java-version-5.0
commons-betwixt对带有集合javabean转换的约定:
1、集合属性的名字要以集合元素类的名字开头(大小写不敏感);
2、每个Bean都必须有一个不带参数的构造方法。或者bean不要写任何构造方法(这样实际上有一个默认的不带参数的构造方法)。
3、每个对于包含其他Bean集合的Bean,要有一个addXxxBean(XxxBean bean)的方法,只有这样,才能保证将xml转换为java的时候,集合属性不丢失。
例子:一个人Person可以有多个宠物Pet,现在创建一个Person,将其转换为XML,然后做个逆转。
Pet.java代码:
import java.io.Serializable; public class Pet implements Serializable { private String nikename; //昵称 private String color; //颜色 /** * 这个默认的构造方法不可少 */ public Pet() { } public Pet(String nikename, String color) { this.nikename = nikename; this.color = color; } public String getNikename() { return nikename; } public void setNikename(String nikename) { this.nikename = nikename; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String toString() { return "Pet{" + "nikename='" + nikename + '\'' + ", color='" + color + '\'' + '}'; } }
Person.java代码:
import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class Person implements Serializable { private String name; //姓名 private int age; //年龄 private List<Pet> petList; //拥有的宠物 /** * 这个默认的构造方法不可少,否则转换出错 */ public Person() { petList = new ArrayList<Pet>(); } public Person(String name, int age) { petList = new ArrayList<Pet>(); this.name = name; this.age = age; } //------------add集合成员的方法----------- /** * 添加集合属性元素的方法,add后的单词必须决定了xml中元素的名字 * @param pet */ public void addPet(Pet pet) { petList.add(pet); } //------------getter/setter----------- public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<Pet> getPetList() { return petList; } public void setPetList(List<Pet> petList) { this.petList = petList; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append("Person{" + "name='" + name + '\'' + ", age=" + age + ", petList=\n"); for (Pet pet : petList) { sb.append("\t\t" + pet.toString()).append(";\n"); } sb.append('}'); return sb.toString(); } }
TestBetwixt.java代码:
import java.beans.IntrospectionException; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import org.apache.commons.betwixt.io.BeanReader; import org.apache.commons.betwixt.io.BeanWriter; import org.xml.sax.SAXException; import com.commonsbetwixt.dto.Person; import com.commonsbetwixt.dto.Pet; public class TestBetwixt { public static String java2XML() throws IOException, SAXException, IntrospectionException { String reslutXml; // 创建一个输出流,将用来输出Java转换的XML文件 StringWriter outputWriter = new StringWriter(); // 输出XML的文件头 outputWriter.write("<?xml version='1.0' ?>\n"); // 创建一个BeanWriter实例,并将BeanWriter的输出重定向到指定的输出流 BeanWriter beanWriter = new BeanWriter(outputWriter); // 配置BeanWriter对象 beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false); beanWriter.getBindingConfiguration().setMapIDs(false); // 不自动生成ID beanWriter.setWriteEmptyElements(true); // 输出空元素 beanWriter.enablePrettyPrint(); // 格式化输出 // 构建要转换的对象 Person person = new Person("唐伯虎", 24); Pet pet1 = new Pet("旺财", "黄色"); Pet pet2 = new Pet("小强", "灰色"); person.getPetList().add(pet1); person.getPetList().add(pet2); // 将对象转换为XML beanWriter.write(person); // 获取转换后的结果 reslutXml = outputWriter.toString(); // 关闭输出流 outputWriter.close(); return reslutXml; } public static Person xml2Java(String xml) throws IntrospectionException, IOException, SAXException { // 创建一个读取xml文件的流 StringReader xmlReader = new StringReader(xml); // 创建一个BeanReader实例,相当于转换器 BeanReader beanReader = new BeanReader(); // 配置BeanReader实例 beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false); beanReader.getBindingConfiguration().setMapIDs(false); // 不自动生成ID // 注册要转换对象的类,并指定根节点名称 beanReader.registerBeanClass("Person", Person.class); // 将XML解析Java Object Person person = (Person) beanReader.parse(xmlReader); return person; } /** * @param args */ public static void main(String[] args) { try { String xml = java2XML(); System.out.println(xml); Person person = xml2Java(xml); System.out.println(person); } catch (IOException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IntrospectionException e) { e.printStackTrace(); } } }
运行结果:
log4j:WARN No appenders could be found for logger (org.apache.commons.betwixt.io.AbstractBeanWriter). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. <?xml version='1.0' ?> <Person> <age>24</age> <name>唐伯虎</name> <petList> <pet> <color>黄色</color> <nikename>旺财</nikename> </pet> <pet> <color>灰色</color> <nikename>小强</nikename> </pet> </petList> </Person> Person{name='唐伯虎', age=24, petList= Pet{nikename='旺财', color='黄色'}; Pet{nikename='小强', color='灰色'}; }
看到了吧,双向转换成功了。
但是修改下petList属性的名字,修改下getPetList、setPetList的名字,去掉默认的构造方法,使得不符合上面的约定原则,双向转换就失败了。
另外,经过commons-betwixt还有一个问题,就是在将xml转Java过程中,如果日期数据元素为空,则导致转换失败。解决办法是,将java转xml的时候,设置忽略空元素beanWriter.setWriteEmptyElements(false);,在将xml转java 的时候,空日期元素删除掉即可。
评论
1 楼
mazongfei
2013-06-17
我的beanReader.registerBeanClass("Person", Person.class); 这行代码出错 是怎么情况?The type org.apache.commons.digester.Digester cannot be resolved. It is indirectly referenced from required .class
files
files
发表评论
-
Spring4Mvc整合Hibernate4框架示例
2016-02-05 11:52 1403今天用NetBeans8.1搭建了一套Spring4MVC+H ... -
Spring4配置properties文件的一点儿细节
2016-02-04 15:40 2806http://repo.spring.io/release/o ... -
JavaWeb发送信息到微信公众平台的企业号
2015-11-01 22:42 3807首先到微信公众平台申请微信企业号: https://qy.we ... -
springmvc+dubbo+zookeeper
2015-09-22 11:34 12035笔者这里使用的是apache- ... -
OracleAS10g安装配置与部署
2015-07-01 20:59 712先到Oracle官方下载OracleAS10的安装包,截图如下 ... -
java和spring使用weblogic数据源配置
2014-10-13 11:29 3034需要weblogic.jar和jrmpclient.jar ... -
一套基本的SpringMvc工程所需要的最基本jar包(pom.xml)
2014-08-19 16:38 1916附件里是pom.xml文件。 -
html的form表单提交得不到参数问题
2014-07-25 16:13 1864今天同事问我他的form表单按submit方式提交,在Java ... -
Spring3Mvc导出PDF的3种形式+导出excel的两种形式(exportAnimal.do)
2014-07-19 22:55 1146附件里SpringMvc导出PDF和Excel的示例代码。 ... -
Java利用中国网建SMS短信通平台发送手机短信
2014-04-26 21:55 2248JAVA发送手机短信,流传有几种方法: (1)使用webser ... -
在Java中发送电子邮件
2014-04-26 18:42 9613要先申请一个网易的126邮箱和一个新浪的com邮箱。 以下程 ... -
cpdetector_1.0.10_binary下载
2014-03-26 20:53 1045附件里是cpdetector_1.0.10_binary.ra ... -
在Java代码中用Axis2调用DotNet语言的WebService程序
2014-02-19 15:19 2583package com.shihuan.ymail.com ... -
SpringMvc多语言配置
2014-01-14 16:01 14438applicationContext.xml文件中加入如下代码 ... -
log4j多级别多输出文件的配置
2013-07-22 21:28 1578以下代码需要log4j-1.2.17.jar的支持。 B ... -
mysql和Oracle在对clob和blob字段的处理
2012-08-25 18:50 30920一、MySQL与Oracle数据库如何处理Clob,Bl ... -
Spring3Mvc+Hibernate整合Axis2发布WebService并配置Quartz调度
2012-08-05 12:54 2220附件里是笔者的源代码,相关的jar包在笔者的abcdef的16 ... -
Lucene案例
2012-06-10 15:15 2613IndexerMmseg4j.java代码如下: import ... -
Mina入门程序
2012-06-02 15:05 1154附件里是Mina的入门程序。 http://mina.apa ... -
让Hibernate的执行语句看见完整参数
2012-04-29 10:09 1048http://www.ibm.com/developerwor ...
相关推荐
在实际应用中,Apache Commons Betwixt可以用于构建Web服务、持久化层或者配置文件的解析。由于0.8版本相对较旧,它可能不包含后来版本中的一些增强特性,例如更好的性能优化、对Java新特性的支持或更丰富的映射选项...
在实际应用中,Apache Commons Betwixt可能与其他Java XML处理库(如JAXB、XStream)一起比较,选择最适合项目需求的工具。虽然Betwixt相对较为简单,但它在处理基本的XML数据绑定时仍然非常有效。对于更复杂的需求...
Java中的Apache Commons Betwixt库提供了一个简单的方法来映射Java Bean对象和XML文档之间的数据,使得在处理数据交换时能轻松地实现bean到XML的转换和XML到bean的反转换。本篇文章将深入探讨如何使用Commons ...
Apache Commons Betwixt 是一个Java库,它简化了JavaBean对象与XML文档之间的相互转换。这个工具包的核心功能在于,它允许开发者自动地将JavaBean的属性映射到XML结构,反之亦然,极大地提高了开发效率,尤其是在...
Commons-Lang 提供了许多许多通用的工具类集,提供了一些java.lang中类的扩展功能 Latka Commons-Latka 是一个HTTP 功能测试包,用于自动化的QA,验收和衰减测试. Launcher Launcher 组件是一个交叉平台的Java 应用...
这个压缩包包含了一些 Apache Commons 的核心模块,让我们逐一分析这些 jar 包所代表的知识点。 1. **commons-math-2.2.jar**: 这是 Apache Commons Math 库,提供了一系列数学和统计计算功能,包括线性代数、...
3. **commons-betwixt-0.8.zip**:Betwixt是一个对象到XML绑定工具,它可以自动将Java对象序列化为XML,并从XML反序列化回对象,帮助开发者处理XML数据。 4. **commons-lang-2.4-bin.zip**:Lang提供了一些在Java...
在实际应用中,Betwixt可以极大地提高开发效率,特别是在处理大量XML数据时。然而,需要注意的是,Betwixt并不支持所有的XML特性,例如命名空间。对于更复杂的XML处理需求,开发者可能需要考虑使用JAXB、XStream或...
commons-betwixt 这个组件提供一个XML自省(introspection)机制用来把Java Bean映射到XML文档 commons-chain 提供实现组织复杂的处理流程的“责任链模式” commons-cli 命令行参数解析 , 由 Werken, Avalon 和 Optz...
commons-betwixt 这个组件提供一个XML自省(introspection)机制用来把Java Bean映射到XML文档 commons-chain 提供实现组织复杂的处理流程的“责任链模式” commons-cli 命令行参数解析 , 由 Werken, Avalon 和 Optz...
5. **commons-betwixt-0.8.jar**:Apache Commons Betwixt是一个对象到XML绑定工具,可以帮助将Java对象序列化为XML,以及从XML反序列化回Java对象。0.8版本提供了一种声明性的方式来描述对象和XML之间的映射。 6. ...
10.commons-Betwixt.jar:XML与Java对象之间相互转换。 11.commons-dbcp.jar:是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。 12.commons-DbUtils.jar:Apache组织提供的一...
4. **commons-lang-2.4-bin.zip**:Apache Commons Lang库,扩展了Java语言的一些功能,如字符串处理、日期和时间操作、数学函数以及反射和异常处理工具。 5. **commons-io-1.4-bin.zip**:Apache Commons IO库,...
3. **commons-betwixt**:是XML绑定工具,能够将Java对象与XML文档相互转换,简化数据交换和序列化。 4. **commons-lang**:提供了许多Java语言功能的增强,包括字符串操作、异常处理、日期时间处理等,是Java开发...
6. **commons-betwixt-0.8.zip**:Apache Commons Betwixt,一个XML绑定工具,使得Java对象和XML文档之间的序列化和反序列化变得更加容易。 7. **commons-lang-2.4-bin.zip**:Apache Commons Lang的2.4版本,包含...
XML(eXtensible Markup Language)是一种用于存储和交换数据的标记语言,广泛应用于软件开发、Web服务和数据存储等领域。在Java编程中,我们经常需要将XML文件的数据转换为Java对象,以便于处理和操作。Apache ...
1. **引入库**:你需要将`commons-betwixt-0.8.jar`文件添加到你的项目类路径中,这是使用Betwixt的前提。 2. **创建Java Bean**:定义一个Java类,包含你想要映射到XML的属性。这些属性将对应XML文档中的元素。 3...
2. **Betwixt**: Betwixt 提供了将JavaBean映射到XML文档和反向映射的功能,使得XML数据与Java对象之间的转换变得更加简单。 3. **Chain**: Chain组件实现了责任链模式,允许构建复杂的处理流程,其中每个处理者...
- **使用第三方库,如Apache Commons Betwixt**:Betwixt是Apache Commons项目的一部分,提供了一种简单的机制来映射Java对象到XML和从XML到Java对象。在提供的`commons-betwixt-0.8.jar`中,包含了Betwixt库,可以...
本文旨在为初学者详细介绍一些常用的jar包及其应用场景,帮助大家更好地理解和掌握这些重要的资源。 #### JTA (jta.jar) JTA (Java Transaction API) 是一个用于管理事务的标准接口,它定义了应用程序如何与事务...