ObjectFactory和MyBatis,将结果映射到JAXBElement <xmlgregoriancalendar>

时间:2017-12-21 10:10:01

标签: java xml types jaxb mybatis

我在apache-camel中运行MyBatis。

查询的结果包含一些jdbcType =“DATE”格式的数据。我编写了自定义ObjectTypeHandler,它处理SQL日期和XMLGregorianCalendar日期类型之间的转换,我将其用于将数据设置为JAXB对象(从xsd方案生成)。

问题在于,并非JAXB类中的所有字段都接受原始XMLGregorianCalendar值,其中一些以需要JAXBElement的方式定义。

我可以使用ObjectFactory实例来解决这个问题,但是我需要为每个以JAXBElement作为输入的字段编写自定义ObjectTypeHandler(因为它们在ObjectFactory中有自己的create *方法)并且有很多。这听起来像很多样板和重复的代码。

是否有可能更优雅地处理它?<​​/ p>

1 个答案:

答案 0 :(得分:0)

我使用@Vadim推荐解决了这个问题:

只需定义xjb文件(generateElementProprety设置为false以避免生成JAXBElement包装器)并在生成POJO期间将其提供给XJC编译器XSD计划。

例如:

bindings.xjb

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <jaxb:globalBindings generateElementProperty="false"/>
</jaxb:bindings>

通过命令启动XJC编译器:

xjc *.xsd -d ../../java -b bindings.xjb

此示例使用../../java文件中的其他设置,从位于工作目录中的方案文件(*.xsd)生成POJO文件到bindings.xjb目录。

谢谢,@ Vadim,指向正确的方向!