我在嘗試將嵌套元素映射到相同的Java類時遇到了問題。JAXB2:將嵌套元素映射到相同的Java類中
XML
我想在這裏做的是設置id
屬性和text
元到SlideText
類。
<module name="test project">
<slide id="1">
<layout>
<text>hello</text>
</layout>
</slide>
</module>
Module類
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Module {
@XmlAttribute
private String name;
@XmlElements({
@XmlElement(name = "slide", type = SlideText.class)
})
private Slide slide;
}
Slide類
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class Slide {
@XmlAttribute
private String id;
}
SlideText類
我噸在text
財產上使用@XmlElementWrapper
,但我得到一個例外,@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
爲了說明什麼,我想在這裏完成,幻燈片可以是任何類型取決於使用什麼佈局。 A 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>
幻燈片是一個複雜的類型。將其定義爲另一個對象,並將其他對象放入此類。這不適合你嗎? – fmucar 2011-02-03 18:12:43
@fmucar:我在上面的帖子中增加了更多推理。 – limc 2011-02-03 18:20:12
注意事項:假設它始終是XML文檔的根元素,您不需要`Module`以外的任何類上的`@ XmlRootElement`。 – earldouglas 2011-02-03 18:21:16