使用Castor工具完成Java对象与XML之间的相互转换

作者:小菜 更新时间:2025-03-16 点击数:
简介:这里将介绍Castor来完成Java对象到xml的相互转换。

它是怎么样转换的?和前面不同的是castor可以用一个mapping.xml文件来描述转换后的Jav

【菜科解读】

这里将介绍Castor来完成Java对象到xml的相互转换。

它是怎么样转换的?和前面不同的是castor可以用一个mapping.xml文件来描述转换后的Java对象的xml基本形态,类似于xStream的annotation,这点还是非常不错的。

下面我们就来看看Castor是怎么样完成Java对象到XML之间的相互转换吧。

一、 准备工作

1、 官方资源

本示例会运用到如下依赖包(jar包):

资源及jar包下载:http://www.castor.org/download.html

junit jar下载地址:

https://github.com/KentBeck/junit/downloads

关于官方提供的mapping配置相关示例、文档:

http://www.castor.org/xml-mapping.html

ibm提供的castor方面的文档资料:

http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&client=aff-cs-360se&hs=Gon&biw=1349&bih=603&q=castor+site%3Awww.ibm.com%2Fdeveloperworks%2Fcn%2Fxml%2F&aq=f&aqi=&aql=&oq=

2、 程序测试运行代码

package com.hoo.test;import java.io.IOException;import java.io.StringReader;import java.io.StringWriter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.exolab.castor.mapping.Mapping;import org.exolab.castor.mapping.MappingException;import org.exolab.castor.xml.MarshalException;import org.exolab.castor.xml.Marshaller;import org.exolab.castor.xml.Unmarshaller;import org.exolab.castor.xml.ValidationException;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.hoo.entity.Account;import com.hoo.entity.AccountArray;import com.hoo.entity.Birthday;import com.hoo.entity.ListBean;import com.hoo.entity.MapBean;/** * function:Castor完成Java对象到XML的相互转换 * 依赖jar: castor-1.3.jar * castor-1.3-core.jar * junit-4.8.2.jar * log4j-1.2.16.jar * commons-logging.jar * @author hoojo * @createDate 2011-4-21 下午07:57:26 * @file CastorTest.java * @package com.hoo.test * @project WebHttpUtils * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */public class CastorTest { private Account bean = null; private Mapping mapping = new Mapping(); private StringWriter writer = null; private StringReader reader = null; @Before public void init() { bean = new Account(); bean.setAddress("北京"); bean.setEmail("email"); bean.setId(1); bean.setName("jack"); Birthday day = new Birthday(); day.setBirthday("2010-11-22"); bean.setBirthday(day); try { /** * 加载mapping.xml,此文件是对需要转换的Java对象的配置描述, * 即:转换后的Java对象的xml内容的转换规则 */ mapping.loadMapping(System.getProperty("user.dir") + "\\src\\mapping.xml"); } catch (IOException e) { e.printStackTrace(); } catch (MappingException e) { e.printStackTrace(); } } @After public void destory() { bean = null; mapping = null; try { if (writer != null) { writer.flush(); writer.close(); } if (reader != null) { reader.close(); } } catch (IOException e) { e.printStackTrace(); } System.gc(); } public void fail(Object o) { System.out.println(o); } public void failRed(Object o) { System.err.println(o); }}

Mapping对象可以完成Java对象到XML的编组和解组,它需要先设定一个mapping.xml,通过xml对JavaObject的描述。

来完成JavaObject的编组、解组工作。

3、 看看即将被转换的JavaEntity代码

Account

package com.hoo.entity;public class Account { private int id; private String name; private String email; private String address; private Birthday birthday; //setter、getter @Override public String toString() { return this.id + "#" + this.name + "#" + this.email + "#" + this.address + "#" + this.birthday; }}

Birthday

package com.hoo.entity;public class Birthday { private String birthday; public Birthday(String birthday) { super(); this.birthday = birthday; } //getter、setter public Birthday() {} @Override public String toString() { return this.birthday; }}

AccountArray

package com.hoo.entity;public class AccountArray { private Account[] accounts; private int size; public int getSize() { size = accounts.length; return size; } public void setSize(int size) { this.size = size; } public Account[] getAccounts() { return accounts; } public void setAccounts(Account[] accounts) { this.accounts = accounts; }}

ListBean

package com.hoo.entity;import java.util.List;public class ListBean { private String name; private List list; //setter、getter}

MapBean

package com.hoo.entity;import java.util.Map;public class MapBean { private Map map; public Map getMap() { return map; } public void setMap(Map map) { this.map = map; }}

二、 编组JavaObject到XML

1、 将JavaBean编组,转换成XML

/** * function:将Javabean编组,转换成XML * @author hoojo * @createDate 2011-4-22 下午12:08:48 */@Testpublic void writeBean2XML() { writer = new StringWriter(); try { //编组 Marshaller.marshal(bean, writer); fail(writer); } catch (MarshalException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }}

代码很简单,通过Marshaller的marshal方法来完成Java对象到XML的编组(序列化、转换)工作。

运行后的结果如下:

?xml version="1.0" encoding="UTF-8"?> 下一篇:

河南许昌社保卡可以当银行卡使用吗

社保卡一年交多少钱2024?在河南许昌上班的职工社保卡每个月交多少钱?社保的缴费档次,分为60%~300%之间都是可以选择的,当然如果说你是工作单位的在职员工,那么就可以通过自己的工作单位来缴纳社保,但是具体的社保缴费档次,是根据你本人工资的实际收入来确定的。

接下来随新社通app小编一起了解具体详情吧。

一、河南许昌社保养老金的计算公式是什么?河南许昌职工社保卡交满15年拿多少?根据河南许昌退休养老金计算公式,人们的养老金肯定包括基础养老金和个人账户养老金两部分,部分参保时间较早、工作时间较长的职工会有过渡性养老金这一待遇。

河南许昌基础养老金计算公式=河南许昌最新的养老金计发基数(1+本人平均缴费指数)÷2缴费年限1%。

河南许昌个人账户养老金计算公式=退休时养老保险个人账户的余额÷退休年龄确定的计发月数。

河南许昌过渡性养老金计算公式,是每一个省份都不一样,是根据当地省份的情况来制定的。

影响河南许昌养老金高低的五大因素。

根据上面所说的养老金计算公式情况,影响养老金高低的五大因素主要是退休地所在的养老金计发基数、缴费年限、本人的平均缴费指数、养老保险个人账户余额、退休年龄确定的计发月数。

由于过渡性养老金并不是所有人都有,所以就不单独说了。

①退休地所在的养老金计发基数,各地说实话相差还是比较大的。

②缴费年限,是包括实际缴费年限和视同缴费年限,这是计算养老金的一项极其重要因素。

其他因素都相同的情况下,养老金是跟缴费年限成正比的。

比如说缴费15年可以领取1500元的情况下,缴费30年可以领取3000元,缴费40年可以领取4000元。

③本人的平均缴费指数,主要是根据缴费基数和计算平均缴费指数使用的社平工资来计算的。

类似于缴费档次,一般在0.6~3之间。

平均缴费指数越高,计算出来的基础养老金就越高。

但是,不要指望最后一两年按照高基数缴费,可以领取高养老金。

平均缴费指数计算,是所有实际缴费年限平均的。

④养老保险个人账户的余额,这主要是看前期的积累了。

不过由于缴费基数上下限的影响,过去我们缴费基数较低,因此个人账户积累也不多。

近年来由于缴费基数提高,个人账户记账利率的提升,因此个人账户的余额才在快速积累。

⑤退休年龄确定的计发月数,这实际上是一种晚退多得的体现。

50岁的计发月数是195个月,55岁是170个月,60岁是139个月。

退休越晚,计划越数越小,相同个人账户余额情况下的个人账户养老金就越高。

各地公布的具体方案不同,个人情况也不同,具体需以个人情况及当地有关部门法规为准。

二、河南许昌职工社保卡每年需要缴纳多少?最新如下  社保卡每年交多少?以秦某职工社保为例:  由上图得知,秦某社保卡一年需要缴纳4423.64元,职工个人月缴纳368.64元,若您想要了解明细点击新社通社保计算器,来了解一下明细吧。

》点击新社通app社保计算器,轻松了解你的社保缴费明细!提示:新社通社保计算器计算所得,数据仅供参考。

每个城市每年设定的最低缴纳基数(即劳动者月收入)各有差异,但总体上遵循着相似的原则,即按比例进行缴纳。

龙鱼身上有红点回事:患上出血病?使用敌菌灵医治

不少人都会在家里养上一些观赏鱼,龙鱼就是观赏性比较高的一种鱼类,所以备受人们喜欢。

不过在饲养龙鱼的过程中,可能会遇到龙鱼身上出现红色斑点的情况,这原因是什么呢?一起来了解一下吧。

龙鱼身上有红点如何回事如果龙鱼身上出现了红点,可能是因为龙鱼患上了出血病。

有很多真相会导致龙鱼患上出血病,例如水温太低、水质太差、细菌感染等。

因为龙鱼喜欢生活在温暖的环境里,对水温有着比较高的要求,所以如果饲养龙鱼时长期让龙鱼处于低温的环境当中,龙鱼身体表面就会受到刺激,从而导致有许多红点出现在体表的情况。

此外,龙鱼对水质也有着比较高的要求,如果龙鱼生活的水质有着太多的杂质和脏东西,龙鱼同样会受到刺激,容易患上出血病,从而在身上出现红点。

如果饲养者长时间不给龙鱼换水的话,水质就会逐渐恶化,会有大量的细菌在水里生殖生长,细菌在进入龙鱼身体之后,就会在体表出现充血的情况,身上也就会有很多红点。

龙鱼身上有红点如何医治如果龙鱼身上出现了红点,可能是因为出血病导致的。

这种情况需要饲养者把鱼缸里水的温度提高到26摄氏度以上,同时保持水温的恒定,这样子不会对龙鱼产生刺激。

之后可以将龙鱼转到阳光充足的地方,能够通过光线照射帮助龙鱼杀菌消毒,加快龙鱼痊愈的速度。

如果龙鱼患上出血病的情况比较严重,饲养者还需要将龙鱼捞出来单独医治,可以使用3-5ppm的敌菌灵对患病的龙鱼进行药浴,每次药浴10-15分钟,每天药浴一次,持续一周左右即可痊愈。

感兴趣的朋友还可以了解一下龙鱼嘴巴烂了如何治。

加入收藏
               

使用Castor工具完成Java对象与XML之间的相互转换

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录