JAXB 中的@XmlElementWrapper注解生成问题

 

JAXB 中的@XmlElementWrapper注解生成问题

1. 面临的问题场景

当我们需要用JAXB处理(生成或读取)这样的xml文件时,根据xjc默认生成的代码,会需要这样去使用

这样代码看起来貌似不太理想,主要是针对Students 对象处理的地方,貌似有点多余,其实本意上就是想用<students>这个标签把<student>元素包起来,无其他用处。怎样解决这个貌似多余代码的问题呢? JAXB提供了@XmlElementWrapper注解来做这个事情。

2. 用@XmlElementWrapper注解使代码更精致

将Root类的代码改造成这样:

这样测试代码只需要写成

这样更精致,但是又一个问题来了,一般我们用JAXB,代码都是用xjc命令行或者xjc的ant task生成,如下:

但是这个我们手工干预的貌似很麻烦,如何让他自动生成@XmlElementWrapper这个注解,并对代码做相应调整。

3. 如何用xjc生成@XmlElementWrapper注解

需要使用github上的这个jaxb-xew-plugin.jarxjc插件(https://github.com/wumpz/jaxb-xew-plugin)。You can download the jar file from here.下面介绍如何使用。

首先这个插件需要匹配JAXB 2.2版本,目前还不兼容于JAXB2.0版本,如果使用2.0版本,会出现NoSuchMethod之类的异常。去jaxb官网找到类似jaxb-ri-2.2.6 的zip包

引用。

编写ant脚本如下:

具体用法可以参见https://github.com/wumpz/jaxb-xew-plugin文档。

这个插件目前能做到我们想要的效果,但是多余的Students类仍然会生成,但是无碍功能,可以手动删除,并在ObjectFactory类中去掉对其的引用。

4. jaxb-xew-plugin一点思考

目前的玩法是先在xsd中定义上studetns这样的元素(把下面的student子元素包起来的元素),然后再用jaxb-xew-plugin插件生成。

而不是:我们不在xsd文件中定义students元素,仅仅凭student元素是0到多个或者1到多个来生成@XmlElementWrapper注解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值