![](/img/trans.png)
[英]JAXB generating JAXBElement<String> instead of String
[英]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以下场景:
JAXBElement
时,该元素应存在于XML中,其值为xsi:nil="true"
。 要摆脱JAXBElement
您可以使用f1sh回答的generateElementProperty
选项,但之后您将无法处理这两种情况。
欲获得更多信息
请参阅我对相关问题的回答:
检查是否可以将参数传递给代码生成器(xjc)。 我曾经遇到过同样的问题但是能够通过将generateElementProperty
设置为false来解决问题。 这是我如何做到的。
这绝对是jaxb代码生成器的一些选项,应该可以关闭。
编辑:根据xjc.exe /?
您可以使用-b
参数加速绑定文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.