繁体   English   中英

JAXB / XJC生成JAXBElement <String> 而不仅仅是String(处理null的情况)

[英]JAXB/XJC generates JAXBElement<String> rather than just String (to handle null case)

使用JDK 1.7附带的JAXB / xjc(bin \\ xjc.exe)

这是我的XSD剪辑:

<xs:complexType name="NameType">
    <xs:sequence>
      <xs:element name="Surname" type="xs:string" nillable="true" minOccurs="0" maxOccurs="1"/>
      <xs:element name="Firstname" type="xs:string" nillable="true" minOccurs="0" maxOccurs="1"/>
      <xs:element name="Middlename" type="xs:string" nillable="true" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
</xs:complexType>

生成的类显示:

@XmlElementRef(name = "Surname", type = JAXBElement.class, required = false)
protected JAXBElement<String> surname;

public JAXBElement<String> getSurname() {
    return surname;
}
public void setSurname(JAXBElement<String> value) {
    this.surname = value;
}

我理解JAXB使用JAXBElement来允许null,但这没有任何意义,因为声明为String的任何东西都可以设置为null。

我无法更改XSD,因为我的客户宁愿将现有的XSD保留在生产环境中。

问题:我可以更改代码生成器来生成:

@XmlElementRef(name = "Surname", type = String.class, required = false)
protected String surname;

public String getSurname() {
    return surname;
}
public void setSurname(String value) {
    this.surname = value;
}

谢谢乔尔

默认情况下,当XML元素既可以为nillable又是可选的时,会生成JAXBElement

<xs:element name="Surname" type="xs:string" nillable="true" minOccurs="0" maxOccurs="1"/>

这是为了允许您构建XML以下场景:

  1. 当属性为null时,元素应该不在XML文档中。
  2. 当设置nil标志时,当属性为JAXBElement时,该元素应存在于XML中,其值为xsi:nil="true"

要摆脱JAXBElement您可以使用f1sh回答generateElementProperty选项但之后您将无法处理这两种情况。

欲获得更多信息

请参阅我对相关问题的回答:

检查是否可以将参数传递给代码生成器(xjc)。 我曾经遇到过同样的问题但是能够通过将generateElementProperty设置为false来解决问题。 这是我如何做到的。

这绝对是jaxb代码生成器的一些选项,应该可以关闭。

编辑:根据xjc.exe /? 您可以使用-b参数加速绑定文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM