1.castor简介:
castor是一种将java对象和XML自动绑定的开源软件。它可以在java对象、XML文本、SQL数据表以及LDAP目录之间绑定。Castor几乎是JAXB的替代品。Castor是ExoLab Group下面的一个开放源代码的项目,它主要实现的是O/R映射功能。它主要API和数据接口为:JDO-like, SQL, OQL, JDBC, LDAP, XML, DSML。它支持分布式目录事务处理和时间;提供处理XML、Directory、XADirectory的类库,提供从XML到JAVA类的转换机制。Castor(http://castor.exolab..org/)是一种将Java对象和XML自动绑定的开源软件。它可以在Java对象、XML文本、SQL数据表以及LDAP目录之间绑定。
2.描述:
使用castor插件进行java对象和xml信息互相直接转换的时候,必须先自己根据xml报文生成对应的maping配置文件和非常麻烦,因为平时有大量不同xml文件需要解析,特别耗时,于是开发出了castor插件java对象和xml互相转换时所需要的maping配置文件和java对象一键生成工具
xml2Maping工具 下载地址:https://download.youkuaiyun.com/download/kemoing/10864595
2.1内容如下图:
- app 文件是应用主目录
- testfile 是工具示列转换xml报文,以及生成的xmlmping文件和对应vo类
- 测试工具包 是调用castor进行xml报文和java对象互相转换示列代码 ps:因打包有问题,无法转换集合类型属性
- X2MUTIL.exe 是启动程序应用
3.使用方法如下:
1).打开工具,密码为:【kemoing】,选择需要解析xml,并填写java对象包名和后缀,如图:
2).点击生成,在文件输出目录查看生成文件和maping配置文件,如下图:
转换xml报文:
<?xml version="1.0" encoding="UTF-8"?>
<service>
<sid>标识功能类别</sid>
<ip>客户端控制台ip地址</ip>
<port>客户端控制台端口</port>
<data count="2">
<!-- iscol 默认为N , xmlmaping 不会体现出来该属性,添加以后会自动 追加 collection="arraylist" 属性-->
<record iscol="Y">
<FPZL>发票种类 固定值:
0:专用发票
2:普通发票
11:货运发票
12:机动车票
51:电子发票
</FPZL>
<FPHM>发票号码</FPHM>
<FPDM>发票代码</FPDM>
</record>
<record iscol="Y">
<FPZL>发票种类 固定值:
0:专用发票
2:普通发票
11:货运发票
12:机动车票
51:电子发票
</FPZL>
<FPHM>发票号码</FPHM>
<FPDM>发票代码</FPDM>
</record>
</data>
</service>
生成xmlmaping内容如下:
<?xml version="1.0"?><!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" "http://castor.org/mapping.dtd">
<mapping>
<!--********* [record] CLASS START *********-->
<class name="com.test.devl.mapping.RecordVO">
<map-to xml="record" />
<!-- 发票号码 -->
<field name="fphm" type="java.lang.String">
<bind-xml name="FPHM"/>
</field>
<!-- 发票代码 -->
<field name="fpdm" type="java.lang.String">
<bind-xml name="FPDM"/>
</field>
<!-- 发票种类 固定值:0:专用发票2:普通发票11:货运发票12:机动车票51:电子发票 -->
<field name="fpzl" type="java.lang.String">
<bind-xml name="FPZL"/>
</field>
</class>
<!--********* [record] CLASS END *********-->
<!--********* [data] CLASS START *********-->
<class name="com.test.devl.mapping.DataVO">
<map-to xml="data" />
<!-- 2 -->
<field name="count" type="java.lang.String">
<bind-xml name="count" node="attribute" />
</field>
<!-- 请添加字段[record]的注释 -->
<field name="records" type="com.test.devl.mapping.RecordVO" collection="arraylist">
<bind-xml name="record"/>
</field>
</class>
<!--********* [data] CLASS END *********-->
<!--********* [service] CLASS START *********-->
<class name="com.test.devl.mapping.ServiceVO">
<map-to xml="service" />
<!-- 客户端控制台端口 -->
<field name="port" type="java.lang.String">
<bind-xml name="port"/>
</field>
<!-- 标识功能类别 -->
<field name="sid" type="java.lang.String">
<bind-xml name="sid"/>
</field>
<!-- 请添加字段[data]的注释 -->
<field name="data" type="com.test.devl.mapping.DataVO">
<bind-xml name="data"/>
</field>
<!-- 客户端控制台ip地址 -->
<field name="ip" type="java.lang.String">
<bind-xml name="ip"/>
</field>
</class>
<!--********* [service] CLASS END *********-->
</mapping>
生成java vo类:
package com.test.devl.mapping;
import java.io.Serializable;
/**
* <b> 在此处简要描述此类的功能 </b>
* <p> 在此处添加此类的描述信息</p>
* 创建日期:2018-12-20 15:41:59
* @author kemoving
* @email kemoing@qq.com
* @version auto_gen_vo 1.2
*/
public class TopVO implements Serializable {
private static final long serialVersionUID = 1L;
}
package com.test.devl.mapping;
/**
* <b> 在此处简要描述此类的功能 </b>
* <p> 在此处添加此类的描述信息</p>
* 创建日期:2018-12-20 15:41:59
* @author kemoving
* @email kemoing@qq.com
* @version auto_gen_vo 1.2
*/
public class ServiceVO extends TopVO{
private static final long serialVersionUID = 1L;
public ServiceVO() {
super();
}
/********* [ServiceVO] VO START *********/
/** 客户端控制台端口 */
private String port;
/**
* 属性port的Getter方法.
* 创建日期:2018-12-20 15:41:59
* @return port String
*/
public String getPort() {
return port;
}
/**
* 属性port的Setter方法.
* 创建日期:2018-12-20 15:41:59
* @param port String
*/
public void setPort(String port) {
this.port=port;
}
/** 标识功能类别 */
private String sid;
/**
* 属性sid的Getter方法.
* 创建日期:2018-12-20 15:41:59
* @return sid String
*/
public String getSid() {
return sid;
}
/**
* 属性sid的Setter方法.
* 创建日期:2018-12-20 15:41:59
* @param sid String
*/
public void setSid(String sid) {
this.sid=sid;
}
/** 请添加字段[data]的注释 */
private DataVO data;
/**
* 属性data的Getter方法.
* 创建日期:2018-12-20 15:41:59
* @return data DataVO
*/
public DataVO getData() {
return data;
}
/**
* 属性data的Setter方法.
* 创建日期:2018-12-20 15:41:59
* @param data DataVO
*/
public void setData(DataVO data) {
this.data=data;
}
/** 客户端控制台ip地址 */
private String ip;
/**
* 属性ip的Getter方法.
* 创建日期:2018-12-20 15:41:59
* @return ip String
*/
public String getIp() {
return ip;
}
/**
* 属性ip的Setter方法.
* 创建日期:2018-12-20 15:41:59
* @param ip String
*/
public void setIp(String ip) {
this.ip=ip;
}
/********* [ServiceVO] VO END *********/
}
package com.test.devl.mapping;
/**
* <b> 在此处简要描述此类的功能 </b>
* <p> 在此处添加此类的描述信息</p>
* 创建日期:2018-12-20 15:41:59
* @author kemoving
* @email kemoing@qq.com
* @version auto_gen_vo 1.2
*/
public class DataVO extends ServiceVO{
private static final long serialVersionUID = 1L;
public DataVO() {
super();
}
/********* [DataVO] VO START *********/
/** 请添加字段[record]的注释 */
private java.util.ArrayList<RecordVO> records;
/**
* 属性records的Getter方法.
* 创建日期:2018-12-20 15:41:59
* @return records ArrayList<RecordVO>
*/
public java.util.ArrayList<RecordVO> getRecords() {
return records;
}
/**
* 属性records的Setter方法.
* 创建日期:2018-12-20 15:41:59
* @param records ArrayList<RecordVO>
*/
public void setRecords(java.util.ArrayList<RecordVO> records) {
this.records=records;
}
/** 2 */
private String count;
/**
* 属性count的Getter方法.
* 创建日期:2018-12-20 15:41:59
* @return count String
*/
public String getCount() {
return count;
}
/**
* 属性count的Setter方法.
* 创建日期:2018-12-20 15:41:59
* @param count String
*/
public void setCount(String count) {
this.count=count;
}
/********* [DataVO] VO END *********/
}
package com.test.devl.mapping;
/**
* <b> 在此处简要描述此类的功能 </b>
* <p> 在此处添加此类的描述信息</p>
* 创建日期:2018-12-20 15:41:59
* @author kemoving
* @email kemoing@qq.com
* @version auto_gen_vo 1.2
*/
public class RecordVO extends DataVO{
private static final long serialVersionUID = 1L;
public RecordVO() {
super();
}
/********* [RecordVO] VO START *********/
/** 发票号码 */
private String fphm;
/**
* 属性fphm的Getter方法.
* 创建日期:2018-12-20 15:41:59
* @return fphm String
*/
public String getFphm() {
return fphm;
}
/**
* 属性fphm的Setter方法.
* 创建日期:2018-12-20 15:41:59
* @param fphm String
*/
public void setFphm(String fphm) {
this.fphm=fphm;
}
/** 发票代码 */
private String fpdm;
/**
* 属性fpdm的Getter方法.
* 创建日期:2018-12-20 15:41:59
* @return fpdm String
*/
public String getFpdm() {
return fpdm;
}
/**
* 属性fpdm的Setter方法.
* 创建日期:2018-12-20 15:41:59
* @param fpdm String
*/
public void setFpdm(String fpdm) {
this.fpdm=fpdm;
}
/** 发票种类 固定值:0:专用发票2:普通发票11:货运发票12:机动车票51:电子发票 */
private String fpzl;
/**
* 属性fpzl的Getter方法.
* 创建日期:2018-12-20 15:41:59
* @return fpzl String
*/
public String getFpzl() {
return fpzl;
}
/**
* 属性fpzl的Setter方法.
* 创建日期:2018-12-20 15:41:59
* @param fpzl String
*/
public void setFpzl(String fpzl) {
this.fpzl=fpzl;
}
/********* [RecordVO] VO END *********/
}
4.项目环境
前期准备:
下载castor相关jar:下载地址:https://download.youkuaiyun.com/download/kemoing/10865080
1.引入相关jar包,,如下图:
2.将X2MUTIL生成的java代码和xmlmaping复制到工程内,具体如图:
3.将相关jar包、log4j.properties 和ExampleDemo.java代码复制到工程内,并修改相关信息,如下图:
4.运行【ExampleDemo】,结果如下: