JAXB2:将嵌套元素映射到同一Java类中

我在尝试将嵌套元素映射到同一个Java类时遇到了麻烦。

XML

我在这里要做的是将id属性和text元素设置为SlideText类。

    hello    

模块类

 @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类

我尝试在text属性上使用@XmlElementWrapper ,但我得到一个exception,即@XmlElementWrapper只能应用于集合。

 @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class SlideText extends Slide { // how to map this to layout/text elements? private String text; } 

有没有办法将hello SlideTextSlideTexttext属性中?

谢谢。

UPDATE

为了说明我在这里要完成的任务,幻灯片可以是任何类型,具体取决于使用的布局。 module知道它是slide但它不知道它是什么幻灯片,这就是为什么我有抽象的Slide类。

基本上,如果这样做,我将创建SlideImageSlideTextVideo ,扩展Slide

以下是实际XML文件的外观: –

    hello       img.jpg       hello a.mp4    

如果您使用EclipseLink JAXB(MOXy),那么您可以利用@XmlPath扩展(我是MOXy技术主管):

 import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import org.eclipse.persistence.oxm.annotations.XmlPath; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class SlideText extends Slide { @XmlPath("layout/text/text()") private String text; } 

使用标准JAXB,您可以利用XmlAdapter:

添加新类Layout

 public class SlideText extends Slide { @XmlElement private Layout layout; } public class Layout { @XmlAttribute private String text; }