- 浏览: 575269 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 1363今天用NetBeans8.1搭建了一套Spring4MVC+H ... -
Spring4配置properties文件的一点儿细节
2016-02-04 15:40 2763http://repo.spring.io/release/o ... -
JavaWeb发送信息到微信公众平台的企业号
2015-11-01 22:42 3766首先到微信公众平台申请微信企业号: https://qy.we ... -
springmvc+dubbo+zookeeper
2015-09-22 11:34 11933笔者这里使用的是apache- ... -
OracleAS10g安装配置与部署
2015-07-01 20:59 669先到Oracle官方下载OracleAS10的安装包,截图如下 ... -
java和spring使用weblogic数据源配置
2014-10-13 11:29 2953需要weblogic.jar和jrmpclient.jar ... -
一套基本的SpringMvc工程所需要的最基本jar包(pom.xml)
2014-08-19 16:38 1885附件里是pom.xml文件。 -
html的form表单提交得不到参数问题
2014-07-25 16:13 1812今天同事问我他的form表单按submit方式提交,在Java ... -
Spring3Mvc导出PDF的3种形式+导出excel的两种形式(exportAnimal.do)
2014-07-19 22:55 1092附件里SpringMvc导出PDF和Excel的示例代码。 ... -
Java利用中国网建SMS短信通平台发送手机短信
2014-04-26 21:55 2210JAVA发送手机短信,流传有几种方法: (1)使用webser ... -
在Java中发送电子邮件
2014-04-26 18:42 9571要先申请一个网易的126邮箱和一个新浪的com邮箱。 以下程 ... -
cpdetector_1.0.10_binary下载
2014-03-26 20:53 997附件里是cpdetector_1.0.10_binary.ra ... -
在Java代码中用Axis2调用DotNet语言的WebService程序
2014-02-19 15:19 2530package com.shihuan.ymail.com ... -
SpringMvc多语言配置
2014-01-14 16:01 14382applicationContext.xml文件中加入如下代码 ... -
log4j多级别多输出文件的配置
2013-07-22 21:28 1536以下代码需要log4j-1.2.17.jar的支持。 B ... -
mysql和Oracle在对clob和blob字段的处理
2012-08-25 18:50 30855一、MySQL与Oracle数据库如何处理Clob,Bl ... -
Spring3Mvc+Hibernate整合Axis2发布WebService并配置Quartz调度
2012-08-05 12:54 2186附件里是笔者的源代码,相关的jar包在笔者的abcdef的16 ... -
Lucene案例
2012-06-10 15:15 2578IndexerMmseg4j.java代码如下: import ... -
Mina入门程序
2012-06-02 15:05 1119附件里是Mina的入门程序。 http://mina.apa ... -
让Hibernate的执行语句看见完整参数
2012-04-29 10:09 1017http://www.ibm.com/developerwor ...
相关推荐
commons-betwixt-0.8.zip,commons-betwixt-0.8-src.zip
commons-betwixt-0.8.rar源文件及jar包
commons-betwixt-0.8.jar
java使用commons-betwixt 实现bean与xml互转
jar包大小:135KB commons-validator-1.3.1.jar jar包大小:93KB commons-transaction-1.2.jar jar包大小:141KB commons-scxml-0.6.jar jar包大小:254KB commons-primitives-1.0.jar jar包大小:60KB commons-pool-1.3....
开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2...
Betwixt是Apache Commons 的一个工具包,提供将 JavaBean 映射至 XML 文档,以及相反映射的服务。
commons-logging-1.0-javadoc.jar, commons-logging-1.0.1-javadoc.jar, commons-logging-1.0.1.jar, commons-logging-1.0.2-javadoc.jar, commons-logging-1.0.2.jar, commons-logging-1.0.3-javadoc.jar, commons-...
赠送jar包:commons-net-3.8.0.jar; 赠送原API文档:commons-net-3.8.0-javadoc.jar; 赠送源代码:commons-net-3.8.0-sources.jar; 赠送Maven依赖信息文件:commons-net-3.8.0.pom; 包含翻译后的API文档:...
常用jar包下载,包括commons-beanutils-1.9.3、commons-collections-3.2.2、commons-collections4-4.1
commons-pool-1.3.jar+commons-pool.jar;java连接池jar包java连接池;java连接池jar;commons-pool-1.2.jar;commons-pool-1.3.jar+commons-pool.jar;java连接池jar包java连接池;java连接池jar;commons-pool-1.2.jar;...
开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发...
赠送jar包:commons-collections-3.2.2.jar; 赠送原API文档:commons-collections-3.2.2-javadoc.jar; 赠送源代码:commons-collections-3.2.2-sources.jar; 赠送Maven依赖信息文件:commons-collections-3.2.2....
commons-collections-20040616.jar, commons-collections-3.2-osgi.jar, commons-collections-3.2-sources.jar, commons-collections-3.2.1.jar, commons-collections-3.2.2-javadoc.jar, commons-collections-3.2.2...
赠送jar包:commons-fileupload-1.4.jar; 赠送原API文档:commons-fileupload-1.4-javadoc.jar; 赠送源代码:commons-fileupload-1.4-sources.jar; 赠送Maven依赖信息文件:commons-fileupload-1.4.pom; 包含...
commons-fileupload-1.3.3.jar和commons-io-2.6.jar最新版本
赠送jar包:commons-collections4-4.1.jar; 赠送原API文档:commons-collections4-4.1-javadoc.jar; 赠送源代码:commons-collections4-4.1-sources.jar; 赠送Maven依赖信息文件:commons-collections4-4.1.pom;...
commons-beanutils.jar commons-collections-3.1.jar commons-pool-1.2.jar 集合
开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2...
赠送jar包:commons-lang3-3.12.0.jar; 赠送原API文档:commons-lang3-3.12.0-javadoc.jar; 赠送源代码:commons-lang3-3.12.0-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.12.0.pom; 包含翻译后的API...