Sto riscontrando problemi nel tentativo di mappare elementi nidificati nella stessa classe Java.JAXB2: mappatura di elementi nidificati nella stessa classe Java
XML
Quello che sto cercando di fare qui è di impostare id
attributi e text
elemento nella SlideText
classe.
<module name="test project">
<slide id="1">
<layout>
<text>hello</text>
</layout>
</slide>
</module>
classe Module
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Module {
@XmlAttribute
private String name;
@XmlElements({
@XmlElement(name = "slide", type = SlideText.class)
})
private Slide slide;
}
Classe Slide classe
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class Slide {
@XmlAttribute
private String id;
}
SlideText
I t ried usando @XmlElementWrapper
su text
proprietà, ma ottengo un'eccezione che @XmlElementWrapper
può essere applicato solo a una raccolta.
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SlideText extends Slide {
// how to map this to layout/text elements?
private String text;
}
Esiste un modo per mappare <layout><text>hello</text></layout>
in s' SlideText
text
proprietà?
Grazie.
UPDATE
per illustrare ciò che sto cercando di realizzare qui, la slitta può essere di qualsiasi tipo a seconda di ciò che il layout viene utilizzato. A module
sa che è un slide
ma non sa quale diapositiva è, motivo per cui ho la classe astratta Slide
.
In sostanza, se questo funziona, creerò SlideImage
e SlideTextVideo
che si estende Slide
.
Ecco come il file XML attuale assomiglia a: -
<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>
Slide è un tipo complesso. Definirlo come un altro oggetto e posizionare l'altro in questa classe. Questo non funziona per te? – fmucar
@fmucar: ho aggiunto più ragionamenti al mio post sopra. – limc
Nota a margine: non è necessario '@ XmlRootElement' su qualsiasi classe diversa da' Modulo', assumendo che sarà sempre l'elemento principale del documento XML. – earldouglas