【问题标题】:Jaxb customization of nillable attribute value for a specific fieldJaxb 自定义特定字段的 nillable 属性值
【发布时间】:2015-11-10 10:53:17
【问题描述】:

我正在使用一个 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 绑定做类似的事情?

问候
朱利奥

【问题讨论】:

    标签: java xml xsd jaxb


    【解决方案1】:

    建议:

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

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

    【讨论】:

    • 我使用 maven XML 插件应用了 XSLT 转换并且它工作了 :) 我没有尝试使用你的插件,因为第一个选项立即工作
    【解决方案2】:

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

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

    您还应该在&lt;javaType&gt; See here Documentation 中添加以下属性

    • parseMethod 是在执行期间要调用的解析方法的名称 解组。
    • printMethod 是要打印的方法的名称 在编组期间调用。

    【讨论】:

    • 我尝试对您的解决方案进行一些尝试,但对我来说它太复杂而无法使其工作(我还需要添加一些 java 代码才能使其工作)。无论如何谢谢;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    相关资源
    最近更新 更多