У меня проблемы с попыткой отобразить вложенные элементы в один и тот же класс 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
для свойства 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
?
Спасибо.
UPDATE
Чтобы проиллюстрировать, что я пытаюсь сделать здесь, слайд может быть любого типа в зависимости от того, какой макет используется. 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>