gpt4 book ai didi

java - 带有未知@XmlRootElement 的 Jaxb Unmarshall

转载 作者:数据小太阳 更新时间:2023-10-29 02:33:44 38 4
gpt4 key购买 nike

在不知道根元素的情况下,我无法解码 XML。例如。

<foo>
<bar/>
</foo>

<bar>
<bar/>
</bar>

等...

我想将解码结​​果映射到类上:

// @XmlRootElement ??
public class Container
implements Serializable
{
private Bar bar;
}

我总是需要修复 @XmlRootElement
我搜索了如何在运行时设置 @XmlRootElement 但没有成功。有什么想法吗?

我在 Spring Batch 上下文中,我可以使用我选择的解码器。

注意:我不能使用 @XmlElementDeclObjectFactory,如图 here因为我不知道可能的根名称

最佳答案

采用他的方法:https://stackoverflow.com/a/33824472/181336

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.transform.stream.StreamSource;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Serializable;

public class Test {

@XmlAccessorType(XmlAccessType.PROPERTY)
public static class Bar {
private String name;

public String getName() {
return name;
}

@XmlElement
public void setName(String name) {
this.name = name;
}
}

@XmlAccessorType(XmlAccessType.PROPERTY)
public static class Container implements Serializable {
private Bar bar;

public Bar getBar() {
return bar;
}

@XmlElement
public void setBar(Bar bar) {
this.bar = bar;
}
}

public static void main(String[] args) throws Exception {
JAXBContext jaxbContext = JAXBContext.newInstance(Container.class);
String xml = "<foo><bar><name>Barry</name></bar></foo>";
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
InputStream is = new ByteArrayInputStream(xml.getBytes());
JAXBElement<Container> barWrapperElement = unmarshaller.unmarshal(new StreamSource(is), Container.class);
Container container = barWrapperElement.getValue();

System.out.println(container.getBar().getName());
}
}

有效!

关于java - 带有未知@XmlRootElement 的 Jaxb Unmarshall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41545564/

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