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
asを宣言すると@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>