ネストされた要素を同じ Java クラスにマップしようとすると問題が発生します。
XML
ここでやろうとしているのは、id
属性とtext
要素をSlideText
クラスに設定することです。
<module name="test project">
<slide id="1">
<layout>
<text>hello</text>
</layout>
</slide>
</module>
モジュールクラス
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Module {
@XmlAttribute
private String name;
@XmlElements({
@XmlElement(name = "slide", type = SlideText.class)
})
private Slide slide;
}
スライドクラス
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class Slide {
@XmlAttribute
private String id;
}
SlideText クラス
@XmlElementWrapper
onプロパティを使用しようとしましたが、コレクションにのみ適用できるtext
例外が発生します。@XmlElementWrapper
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SlideText extends Slide {
// how to map this to layout/text elements?
private String text;
}
のプロパティにマップ<layout><text>hello</text></layout>
する方法はありますか?SlideText
text
ありがとう。
アップデート
ここで何を達成しようとしているのかを説明するために、使用するレイアウトに応じてスライドを任意のタイプにすることができます。Aはそれが A であることはmodule
知ってslide
いますが、それがどのスライドであるかはわかりません。そのため、抽象Slide
クラスを使用しています。
基本的に、これが機能する場合は、作成SlideImage
しSlideTextVideo
、拡張しSlide
ます。
実際の XML ファイルは次のようになります。
<module name="test project">
<slide id="1">
<layout-text>
<text>hello</text>
</layout-text>
</slide>
</module>
<module name="test project">
<slide id="2">
<layout-image>
<image-path>img.jpg</image-path>
</layout-image>
</slide>
</module>
<module name="test project">
<slide id="3">
<layout-text-video>
<text>hello</text>
<video-path>a.mp4</video-path>
</layout-text-video>
</slide>
</module>