gpt4 book ai didi

java - 将多个子 JAXBElement 放入父 JAXBElement 中

转载 作者:行者123 更新时间:2023-12-01 18:29:43 26 4
gpt4 key购买 nike

以下代码有效:

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:

<xml>
<lv1>
<lv2>val1</lv2>
</lv1>
</xml>

如何让它产生多个lv2元素?期望的输出:

<xml>
<lv1>
<lv2>val1</lv2>
<lv2>val2</lv2>
</lv1>
</xml>

最后我想创建一个带有动态标签的深层 XML 结构。

我尝试将不同的 declaredTypevalue 传递给 lv1elem 的构造函数,但没有运气:

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

最佳答案

通过使用中间 java bean 找到了解决方法 Recurs具有 List<Object> 类型的属性。我还得包起来RecursJAXBElement更改默认标签名称 <recurs>发送至所需号码:<lv1> 。里面的列表Recurs可以包含一个或多个JAXBElement包括其他JAXBElement<Recurs>或 JAXB 上下文已知的其他类型。

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

}

关于java - 将多个子 JAXBElement 放入父 JAXBElement 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60183476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com