使用JAXB生成Java基元类型的XML Schema类型不需要添加

Jon*_*mos 6 java xsd jaxb

我正在使用JAXB(xjc版本2.2.4-2)从XML Schema生成Java类.映射到Java原始数据类型的XML类型不会添加:

@XmlElement(required = true)
Run Code Online (Sandbox Code Playgroud)

例如,使用时:

<element name="userId" type="long"/>
<element name="userName" type="string"/> 
Run Code Online (Sandbox Code Playgroud)

将导致:

//no annotation added here
protected long userId;
@XmlElement(required = true)
protected String userName;
Run Code Online (Sandbox Code Playgroud)

有没有人解释为什么会这样?

这有什么与您可以使用xjc设置的选项有关吗?

Ian*_*rts 7

您不需要注释来显示需要Java类型的属性,long因为原始值不能为null这是隐含的.类型xs:long映射到Java 的非可填充必需元素long,可选或可映射的元素映射到java.lang.Long(允许null,表示不存在或xsi:nil适当时).

一个可选又可以为 nillable 的元素(奇数,但XML Schema允许)将映射到a JAXBElement<Long>以区分缺席(a null JAXBElement)和nil(非null JAXBElement,isNil()返回true).