Java JAXB生成nillable=true

Java JAXB生成nillable=true,java,inheritance,jaxb,abstract,Java,Inheritance,Jaxb,Abstract,我正在使用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> 这是STEBeitrag的定义: &l

我正在使用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>
这是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>


如果我没有在生成的CT_Beitrag对象中设置ArtID,则解组器将生成如下输出

<ns:ArtID xsi:nil="true"/>

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

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

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

我想到了两个选项:

  • 更改模式(我知道您说过您不能更改,但如果由于托管在您无法控制的服务器上而无法更改该模式,您可能可以获取该模式的本地副本)
  • 更改生成的代码。。。只需将
    nillable=true
    更改为
    nillable=false

  • 我没有解决方案,但是这个问题在bug中得到了解决 我希望这个问题能解决

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