Jaxb自定义特定字段的可为空的属性值

时间:2015-11-10 10:53:17

标签: java xml xsd jaxb

我正在使用XSD架构文件(我无法更改)将元素XXX定义如下:

<xsd:element name="XXX" type="Date" minOccurs="0"/>
这会在生成的类中生成java.util.Date。

我需要更改字段编组为XML的方式:如果属性为null,我想生成一个空标记,就像xsd是:

<xsd:element name="XXX" type="Date" minOccurs="0" nillable=true/>
这会在生成的类中生成JaxbElement。

是否可以通过Jaxb绑定做这样的事情?

问候
Giulio的

2 个答案:

答案 0 :(得分:3)

是的,你可以..但不是一个好习惯。

<bindings node="//xs:element[@name='XXX']">
    <property name="xxx">
        <baseType> 
            <javaType name= "javax.xml.bind.JAXBElement&lt;java.util.Date&gt;"/>
        </baseType>
    </property>
</bindings>

您还应在<javaType> See here Documentation

中添加以下属性
  • parseMethod是要在其中调用的解析方法的名称 解组。
  • printMethod是打印方法的名称 在编组期间召集。

答案 1 :(得分:3)

建议:

  • 使用XSLT预处理架构,以便在需要的地方添加nillable
  • 使用jaxb2-simplify-plugin并使用simplify:as-reference-property自定义您的元素。我实际上从未尝试过,但也许它会起作用。
  • 编写一个XJC插件。

PS。我是上述jaxb2-simplify-plugin的作者。