Jaxb Unmarshall带有未知的@XmlRootElement
在不知道根元素的情况下,我无法实现解组 XML。 例如。
要么
等等…
我想在类上映射解组结果:
// @XmlRootElement ?? public class Container implements Serializable { private Bar bar; }
我总是需要修复@XmlRootElement
。
我搜索了如何在运行时设置@XmlRootElement但没有成功。 任何想法?
我在Spring Batch上下文中,我可以使用我选择的unmarshaller。
注意:我不能使用@XmlElementDecl
或ObjectFactory
,如下所示,因为我不知道可能的根名称的名称 。
改编他的方法: 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 = "Barry "; Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); InputStream is = new ByteArrayInputStream(xml.getBytes()); JAXBElement barWrapperElement = unmarshaller.unmarshal(new StreamSource(is), Container.class); Container container = barWrapperElement.getValue(); System.out.println(container.getBar().getName()); } }
有用!
你传递的XML确实有一个根元素,你提到的xml有两个文件
要么
所以在这里你有两个根名称foo或bar,所以为每个创建两个类,如果它将调用该类的根名称