使用 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 元素可空且可选时,会生成一个 JAXBElement
。
<xs:element name="Surname" type="xs:string" nillable="true" minOccurs="0" maxOccurs="1"/>
这是为了让您在以下场景中构造 XML:
- 当属性为 null 时,XML 文档中不应包含该元素。
- 当属性为
JAXBElement
且设置了 nil 标志时,该元素应以xsi:nil="true"
的值出现在 XML 中。<
要摆脱 JAXBElement
,您可以使用 generateElementProperty
选项作为 answered by f1sh,但是你将无法处理这两种情况。
了解更多信息
查看我对相关问题的回答:
关于java - JAXB/XJC 生成 JAXBElement<String> 而不仅仅是 String(以处理 null 大小写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26549095/