1

我为 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> {
}

当我声明nameas@XmlEement(nilalble = true)时,它工作正常。但是在和@XmlValue之间产生了一些问题。xsi:nil""

有什么方法可以设置nillable = true@XmlAnyElement

更新 - - - - - - - - - - - - - - - - - - - - - - - - - ---------

Item#name使用 注释时@XmlElement,成功地遵循 XML 编组和解组。

<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在每个项目上都失败了。被解析为空元素的""withoutxsi:nill每个都来自nulls。只是@XmlValue问题吗?@XmlAnyElement(lax = true)@Blaise Doughan 我还是从你的博客文章中了解到的。谢谢。

这就是我想要的。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<items xmlns:xsi="..." xmlns="http://jinahya.googlecode.com/xml/bind/test">
    <item id="7812630870400466385">name</item>
    <item>name</item>
    <item id="-1067677982428177088" xsi:nil="true">
    <item id="5609376399324841172">name</item>
    <item id="-4755856949417090129" xsi:nil="true">
</items>
4

0 回答 0