我在apache-camel中运行MyBatis。
查询的结果包含一些jdbcType =“DATE”格式的数据。我编写了自定义ObjectTypeHandler,它处理SQL日期和XMLGregorianCalendar日期类型之间的转换,我将其用于将数据设置为JAXB对象(从xsd方案生成)。
问题在于,并非JAXB类中的所有字段都接受原始XMLGregorianCalendar值,其中一些以需要JAXBElement的方式定义。
我可以使用ObjectFactory实例来解决这个问题,但是我需要为每个以JAXBElement作为输入的字段编写自定义ObjectTypeHandler(因为它们在ObjectFactory中有自己的create *方法)并且有很多。这听起来像很多样板和重复的代码。
是否有可能更优雅地处理它?</ p>
答案 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,指向正确的方向!