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>