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

Jaxb customization of nillable attribute value for a specific field

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

<xsd:element name="XXX" type="Date" minOccurs="0"/>
这会在生成的 class.

中产生一个 java.util.Date

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

<xsd:element name="XXX" type="Date" minOccurs="0" nillable=true/>
这会在生成的 class.

中生成一个 JaxbElement

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

此致
朱利奥

是的,你可以..但这不是一个好的做法。

<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 是要打印的打印方法的名称 在编组期间调用。

建议:

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

ps。我是上述 jaxb2-simplify-plugin.

的作者