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で失敗しました。空の要素ウィッチとして解析された""なしxsi:nillは、それぞれ s から来ましたnull。だけ@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