jaxb xs:element 忽略空列表
jaxb xs:element ignore empty list
我有一个类似
的模式文件
<xs:complexType name="Autorisation">
<xs:sequence>
<xs:element name="roles" type="Roles"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Roles">
<xs:sequence>
<xs:element name="role" type="Role" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Role">
<xs:sequence>
<xs:element name="type" type="xs:int"/>
<xs:element name="dateDebut" type="xs:dateTime"/>
<xs:element name="dateFin" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
它生成类似的东西:
@XmlElementWrapper
@XmlElement(name = "role")
protected List<Role> roles;
当我使用 JAXB.marshal(input, Output);
创建一个 xml 文件且角色列表为空时,生成的 xml 文件包含 <role/>
我怎样才能避免这种情况?
谢谢!! :)
@XmlElementWrapper
@XmlElement(name = "role")
protected List<Role> roles;
然后会发生以下情况之一:
如果 roles
包含您将获得的项目:
<roles>
<role>...</role>
<role>...</role>
</roles>
如果 roles
是一个空列表,您将得到:
<roles/>
如果 roles
为空,则 roles
元素将不会出现。
了解更多信息
我在我的博客上写了更多关于这个的内容:
更新
I also use "dozer" to convert Object into another object, so empty
list are never null. Is there no way to tell JAXB ignore empty list ?
您可以在您的域 class 上添加一些编组事件回调方法来调整编组前后的 List
属性(参见:https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/Marshaller.html#marshalEventCallback)。
void beforeMarshal(Marshaller) {
if(roles != null && roles.isEmpty()) {
roles = null;
}
}
void afterMmarshal(Marshaller) {
if(null == roles) {
roles = new ArrayList<Role>();
}
}
我有一个类似
的模式文件 <xs:complexType name="Autorisation">
<xs:sequence>
<xs:element name="roles" type="Roles"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Roles">
<xs:sequence>
<xs:element name="role" type="Role" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Role">
<xs:sequence>
<xs:element name="type" type="xs:int"/>
<xs:element name="dateDebut" type="xs:dateTime"/>
<xs:element name="dateFin" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
它生成类似的东西:
@XmlElementWrapper
@XmlElement(name = "role")
protected List<Role> roles;
当我使用 JAXB.marshal(input, Output);
创建一个 xml 文件且角色列表为空时,生成的 xml 文件包含 <role/>
我怎样才能避免这种情况?
谢谢!! :)
@XmlElementWrapper
@XmlElement(name = "role")
protected List<Role> roles;
然后会发生以下情况之一:
如果
roles
包含您将获得的项目:<roles> <role>...</role> <role>...</role> </roles>
如果
roles
是一个空列表,您将得到:<roles/>
如果
roles
为空,则roles
元素将不会出现。
了解更多信息
我在我的博客上写了更多关于这个的内容:
更新
I also use "dozer" to convert Object into another object, so empty list are never null. Is there no way to tell JAXB ignore empty list ?
您可以在您的域 class 上添加一些编组事件回调方法来调整编组前后的 List
属性(参见:https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/Marshaller.html#marshalEventCallback)。
void beforeMarshal(Marshaller) {
if(roles != null && roles.isEmpty()) {
roles = null;
}
}
void afterMmarshal(Marshaller) {
if(null == roles) {
roles = new ArrayList<Role>();
}
}