現在、クラス内にはさまざまなxml要素ラッパーがあります。JAXB:xml要素の名前を透明にします。
xml要素のxmlタグに単一の属性を追加したいとします。 これは私のアプリケーションのフラグとして機能します。
すべてのxml要素は異なる属性値を持つので、私はそれらを一緒にパックすると考えました。
このため、私は2つのフィールドを持つ新しいオブジェクトを作成しました。それを属性として使用するための一般的な値フィールドと文字列フィールド。
残念ながら、値のフィールドから「garbage」xmlタグの前に値を抽出する方法が見つかりません。
これを実行する方法はありますか。 もっと明確にするために、コードの特定の部分を示します。
@XmlRootElement(name = "client")
class Client {
private List<String> names;
private List<Integer> salaries;
private List<Long> socialSecurityNos;
@XmlElementWrapper(name = "names")
@XmlElement(name = "name")
public List<String> getNames() {
return this.names;
}
@XmlElementWrapper(name = "salaries")
@XmlElement(name = "salary")
public List<String> getSalaries() {
return this.salaries;
}
@XmlElementWrapper(name = "socialsecuritynos")
@XmlElement(name = "socialsecurityno")
public List<String> getSocialSecurityNo() {
return this.socialSecurityNos;
}
...
...
}
これは、次のXML
<foo>
<names>
<name>
George
</name>
<name>
John
</name>
</names>
<salaries>
<salaries>
...
...
</salaries>
</salaries>
<socialSecurityNo>
<socialSecurityNo>
...
...
</socialSecurityNo>
</socialSecurityNo>
</foo>
に新しい価値、私が書いた属性ペアクラスを生成します。
@XmlRootElement(name = "client")
class GenericElement <T> {
private String attribute;
private T value;
public T getValue() {
return this.value;
}
@XmlAttribute(name = "flag")
public String getAttribute() {
return this.attribute;
}
}
そしてもちろん、私はこの結果を取得したいリストの種類
@XmlRootElement(name = "client")
class Client {
private List<GenericElement<String>> names;
private List<GenericElement<Integer>> salaries;
private List<GenericElement<Long>> socialSecurityNos;
...
...
を変更しました。
代わりに、「ガーベッジ」値タグを使用します。
<foo>
<names>
<name flag="on">
<value>George</value>
</name>
...
<name flag="off">
<value>Value</value>
</name>
</names>
....
....
....................</value>
</socialSecurityNo>
</socialSecurityNo>
</foo>
はどうやらXmlValueは、マーシャリング時にのみ「既知」そうでない場合NullPointerExceptionがスローされた型に対応しています。 – Chrys
ああ、私は、ジェネリック型では動作しません。その場合、[this](http://stackoverflow.com/questions/8807296/jaxb-generic-xmlvalue/8901997#8901997)他の回答は、このトリックを行う必要があります。 –