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

2023-11-26

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

XML

我在这里想做的是设置id属性和text元素进入SlideText class.

<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;
}

幻灯片文本类

我尝试使用@XmlElementWrapper on 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> into SlideText's text财产?

Thanks.

UPDATE

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

本质上,如果这有效,我将创建SlideImage and 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>

如果你使用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;

}
  • http://bdoughan.blogspot.com/2010/09/xpath-based-mapping-geocode-example.html

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

  • http://bdoughan.blogspot.com/2010/07/xmladapter-jaxbs-secret-weapon.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAXB2:将嵌套元素映射到同一个 Java 类中 的相关文章

随机推荐