![](/img/trans.png)
[英]JAXB Unmarshall Error: UnmarshalException- Unexpected Element - Expected elements are (none) - @XmlRootElement NOT missing
[英]Jaxb Unmarshall with an unknown @XmlRootElement
在不知道根元素的情況下,我無法實現解組 XML。 例如。
<foo>
<bar/>
</foo>
要么
<bar>
<bar/>
</bar>
等等...
我想在類上映射解組結果:
// @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 = "<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());
}
}
有用!
哪個XML傳遞確實有一個根元素,你提到的xml有兩個文件
<foo>
<bar/>
</foo>
要么
<bar>
<bar/>
所以在這里你有兩個根名稱foo或bar,所以為每個創建兩個類,如果它將調用該類的根名稱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.