【问题标题】:JAXB Generation nillable=trueJAXB 生成 nillable=true
【发布时间】:2011-07-01 12:39:34
【问题描述】:

使用 JAXB 2.2.4,我使用以下绑定文件生成 Java 代码:

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<globalBindings generateElementProperty="false">

</globalBindings>

不幸的是,生成的代码有一个 nillable = true 注释。请参阅以下示例:

@XmlElement(name = "ArtID", nillable = true)
protected STEBeitrag artID;

这是STEBeitrag的定义:

<xsd:complexType name="CT_Beitrag">
    <xsd:complexContent>
        <xsd:extension base="allgemein:CT_Objekt">
            <xsd:sequence>
                <xsd:element name="ArtID" type="daten:STE_Beitrag" minOccurs="0" maxOccurs="1" nillable="true"/></xsd:element>
            </xsd:sequence>
        </xsd:extension>
     </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="STE_Beitrag" abstract="true">
    <xsd:simpleContent>
     <xsd:extension base="xsd:string"/>
   </xsd:simpleContent>
</xsd:complexType>

如果我没有在生成的 CT_Beitrag 对象中设置 ArtID,那么解组器会产生类似

的输出
<ns:ArtID xsi:nil="true"/>

元素 ArtID 具有抽象类型,因此此 XML 输出无效。

如何使用 JAXB 生成在 XmlElement 注释中省略 nillable=true 的代码? 顺便说一句,架构不能更改。

【问题讨论】:

    标签: java inheritance jaxb abstract


    【解决方案1】:

    我没有解决办法,但是这个问题已经在 bug 中解决了 http://java.net/jira/browse/JAXB-890 我希望这个问题能得到解决。

    【讨论】:

      【解决方案2】:

      我不知道如何去做你所要求的,如果你所要求的值得付出努力,我会感到惊讶。

      我想到了两个选项:

      1. 更改架构(我知道您说过不能,但如果由于架构托管在您无法控制的服务器上而无法更改架构,也许您可​​以获取架构的本地副本)
      2. 更改生成的代码...只需将nillable=true 更改为nillable=false

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-16
        • 1970-01-01
        相关资源
        最近更新 更多