首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个子JAXBElement放入父JAXBElement中

将多个子JAXBElement放入父JAXBElement中
EN

Stack Overflow用户
提问于 2020-02-12 07:50:20
回答 1查看 368关注 0票数 0

以下代码起作用:

代码语言:javascript
复制
private List<Object> custom;

@XmlAnyElement
public List<Object> getCustom() {
    if (custom == null) {
        custom = new ArrayList<>();

        final JAXBElement<String> lv2elem =
            new JAXBElement<String>(new QName("lv2"), String.class, "val1");

        final JAXBElement lv1elem =
            new JAXBElement(new QName("lv1"), JAXBElement.class, lv2elem);
        custom.add(lv1elem);
    }
    return custom;
}

当封送对象时,它会生成以下XML:

代码语言:javascript
复制
<xml>
    <lv1>
        <lv2>val1</lv2>
    </lv1>
</xml>

如何使它生成多个lv2 元素?所需的输出:

代码语言:javascript
复制
<xml>
    <lv1>
        <lv2>val1</lv2>
        <lv2>val2</lv2>
    </lv1>
</xml>

最后,我想要创建一个带有动态标记的深度XML结构。

我试图将不同的declaredTypevalue传递给lv1elem的构造函数,但没有成功:

代码语言:javascript
复制
// class [Ljavax.xml.bind.JAXBElement; nor any of its super class is known to this context.
lv1elem = new JAXBElement(new QName("lv1"), JAXBElement.class, new JAXBElement[] { lv2elem });

// [Ljavax.xml.bind.JAXBElement; is not known to this context
lv1elem = new JAXBElement(new QName("lv1"), JAXBElement[].class, new JAXBElement[] { lv2elem });

// class java.util.Arrays$ArrayList nor any of its super class is known to this context.
lv1elem = new JAXBElement(new QName("lv1"), JAXBElement.class, Arrays.asList(new JAXBElement[] { lv2elem } ));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-12 08:52:10

通过使用具有List<Object>类型属性的中间java List<Object>找到解决办法。我仍然必须用Recurs包装JAXBElement,以将标记名从默认的<recurs>更改为所需的标记名称:<lv1>Recurs中的列表可以包含一个或多个JAXBElement,包括其他JAXBElement<Recurs>或JAXB上下文已知的其他类型。

代码语言:javascript
复制
public class Recurs {

    private List<Object> custom;

    @XmlAnyElement
    public List<Object> getCustom() {
        if (custom == null) {
            custom = new ArrayList<>();
        }
        return custom;
    }

    public void setCustom(List<Object> custom) {
        this.custom = custom;
    }
}


@XmlRootElement
@XmlSeeAlso({ Recurs.class }) // !!! This is important
public class Xml {
    private List<Object> custom;

    @XmlAnyElement
    public List<Object> getCustom() {
        if (custom == null) {
            custom = new ArrayList<>();

            JAXBElement<String> lv2elem;
            Recurs recurs = new Recurs();
            for (int i = 1; i <= 2; i++) {
                lv2elem = new JAXBElement<String>(new QName("lv2"), String.class, "val" + i);
                recurs.getCustom().add(lv2elem);
            }
            JAXBElement lv1elem = new JAXBElement(new QName("lv1"), Recurs.class, recurs);
            custom.add(lv1elem);
        }
        return custom;
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60183476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档