私は次の XML 構造をより大きなドキュメント内にマップしようとしています。
わかりやすくするために簡略化した例:
<details>
<pictures>
<picture1>
http://domain.com/path/picture1.jpg
</picture1>
<picture2>
http://domain.com/path/picture2.jpg
</picture2>
<picture3>
http://domain.com/path/picture3.jpg
</picture3>
<picture4>
http://domain.com/path/picture4.jpg
</picture4>
<picture5>
http://domain.com/path/picture5.jpg
</picture5>
<picture6>
http://domain.com/path/picture6.jpg
</picture6>
<picture7>
http://domain.com/path/picture7.jpg
</picture7>
</pictures>
</details>
このドキュメントには、1 ~ 30 の番号が付けられた最大 30 の異なる画像要素が存在することを宣言する DTD があります。<picutre[n]/>
私がやりたいのは、Picture1、Picture2、Picture3 などと呼ばれるこれらの要素ごとに 30 の異なるクラスを作成することではありません。単一の Picture クラスを使用し、それを 30 の一意の要素名すべてに使用したいと考えています。
以下は、私がこれまでに試したことです。
@XmlRootElement
public class Details {
...
@XmlElementWrapper
@XmlElementRefs({
@XmlElementRef( name="picture1", type=Picture.class ),
@XmlElementRef( name="picture2", type=Picture.class ),
@XmlElementRef( name="picture3", type=Picture.class ),
@XmlElementRef( name="picture4", type=Picture.class ),
@XmlElementRef( name="picture5", type=Picture.class ),
@XmlElementRef( name="picture6", type=Picture.class ),
@XmlElementRef( name="picture7", type=Picture.class ),
@XmlElementRef( name="picture8", type=Picture.class ),
@XmlElementRef( name="picture9", type=Picture.class ),
@XmlElementRef( name="picture10", type=Picture.class ),
@XmlElementRef( name="picture11", type=Picture.class ),
@XmlElementRef( name="picture12", type=Picture.class ),
@XmlElementRef( name="picture13", type=Picture.class ),
@XmlElementRef( name="picture14", type=Picture.class ),
@XmlElementRef( name="picture15", type=Picture.class ),
@XmlElementRef( name="picture16", type=Picture.class ),
@XmlElementRef( name="picture17", type=Picture.class ),
@XmlElementRef( name="picture18", type=Picture.class ),
@XmlElementRef( name="picture19", type=Picture.class ),
@XmlElementRef( name="picture20", type=Picture.class ),
@XmlElementRef( name="picture21", type=Picture.class ),
@XmlElementRef( name="picture22", type=Picture.class ),
@XmlElementRef( name="picture23", type=Picture.class ),
@XmlElementRef( name="picture24", type=Picture.class ),
@XmlElementRef( name="picture25", type=Picture.class ),
@XmlElementRef( name="picture26", type=Picture.class ),
@XmlElementRef( name="picture27", type=Picture.class ),
@XmlElementRef( name="picture28", type=Picture.class ),
@XmlElementRef( name="picture29", type=Picture.class ),
@XmlElementRef( name="picture30", type=Picture.class )
})
public List<Picture> getPictures() {
return this.pictures;
}
public void setPictures( List<Pictures> pictures ) {
this.pictures = pictures;
}
...
}
@XmlElementWrapper
public class Picture {
...
}
これにより、getPictures は常に null を返します。
さらに、Picture クラスの注釈を次のように変更しようとしました。@XmlElementWrapper( name="picture1" )
その結果、getPictures() からリストが返されましたが、<picture1/>
要素のみが含まれ、残りは含まれませんでした。
代わりに JAXBElement オブジェクトのリストを取得することに頼ることができることはわかっていますが、それを避けることができれば、そうしたくありません。これをどのようにマッピングできますか?