Tengo problemas para tratar de asignar elementos anidados en la misma clase Java.JAXB2: asignación de elementos anidados en la misma clase Java
XML
Lo que estoy tratando de hacer aquí es fijar id
atributo y text
elemento en SlideText
clase.
<module name="test project">
<slide id="1">
<layout>
<text>hello</text>
</layout>
</slide>
</module>
clase Módulo
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Module {
@XmlAttribute
private String name;
@XmlElements({
@XmlElement(name = "slide", type = SlideText.class)
})
private Slide slide;
}
clase Slide clase
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class Slide {
@XmlAttribute
private String id;
}
SlideText
I t ried utilizando @XmlElementWrapper
en la propiedad text
, pero aparece la excepción de que @XmlElementWrapper
solo se puede aplicar a una colección.
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SlideText extends Slide {
// how to map this to layout/text elements?
private String text;
}
¿Hay una manera de hacer corresponder <layout><text>hello</text></layout>
en text
propiedad SlideText
's?
Gracias.
ACTUALIZACIÓN
Para ilustrar lo que estoy tratando de lograr aquí, la corredera puede ser de cualquier tipo en función de lo que el diseño se utiliza. Un module
sabe que es un slide
pero no sabe qué diapositiva es, razón por la cual tengo la clase abstracta Slide
.
Básicamente, si esto funciona, voy a crear SlideImage
y SlideTextVideo
que se extiende Slide
.
Así es como el archivo XML real se parece 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 es un tipo complejo. Defínalo como otro objeto y coloca el otro en esta clase. ¿Esto no funciona para ti? – fmucar
@fmucar: Agregué más razonamiento a mi publicación anterior. – limc
Nota al margen: no necesita '@ XmlRootElement' en ninguna clase que no sea' Module', suponiendo que siempre será el elemento raíz del documento XML. – earldouglas