我在尝试将嵌套元素映射到同一个 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
ontext
属性,但我得到一个@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
属性?
谢谢。
更新
为了说明我在这里要完成的工作,幻灯片可以是任何类型,具体取决于使用的布局。Amodule
知道它是 aslide
但它不知道它是什么幻灯片,这就是我有抽象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>