我为JAXB创建了多个元素的通用类。
@XmlTransient
public abstract class Plural<S> {
@XmlAnyElement(lax = true)
private Collection<S> singulars;
}
使用以下课程
@XmlRootElement
public class Item {
//@XmlValue // problem with xsi:nill and ""
@XmlElement(nillable = true)
private String name;
}
@XmlRootElement
public class Items extends Plural<Item> {
}
当我将name
声明为@XmlEement(nilalble = true)
时,它可以正常工作。但@XmlValue
在xsi:nil
和""
之间存在问题。
有没有办法在nillable = true
上设置@XmlAnyElement
?
更新---------------------------------------------- ------------
Item#name
注释@XmlElement
时,成功执行XML marshalls和unmarshalls。
<items xmlns="http://jinahya.googlecode.com/xml/bind/test">
<item id="-4939700912221365683">
<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</item>
<item>
<name>name</name>
</item>
<item>
<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</item>
<item id="-8544902644460968391">
<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</item>
<item id="525642804765733165">
<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</item>
</items>
当Item#name
注释@XmlValue
时,输出XML编组和解组,但在相等测试时失败。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<items xmlns="http://jinahya.googlecode.com/xml/bind/test">
<item id="7812630870400466385">name</item>
<item>name</item>
<item id="-1067677982428177088"/>
<item id="5609376399324841172">name</item>
<item id="-4755856949417090129"/>
</items>
在每个xsi:nil
元素上省略了item
。因此Item#equals
每个项目都失败了。 ""
没有xsi:nill
解析为空元素的每一个都来自null
s。它只是@XmlValue
的问题吗? @Blaise Doughan无论如何,我从你的博客条目中了解了@XmlAnyElement(lax = true)
。感谢。