我有一些XML格式的测试数据,我想映射到POJO。
<Root>
<Child1>
<Data>
</Data>
</Child1>
<Child2>
<Data>
</Data>
</Child2>
</Root>
Child1是第一个对象,Child2是第二个对象。
JAXBContext context = JAXBContext.newInstance(classesToLoad);
Unmarshaller um = context.createUnmarshaller();
Object obj = (Object) um.unmarshal(data);
在这种情况下,Object 只是一个占位符
@Getter
@Setter
@XmlRootElement(name = "TestData")
public class Child1 {
@XmlElement(name = "ID")
private String ID;
}
。
这是我现在正在使用的代码,但出现此异常:
javax.xml.bind.UnmarshalException:意外元素(URI:“”, lokal:“ TestData”)。期望的元素是:Child1
答案 0 :(得分:1)
移动注释
@XmlRootElement(name = "TestData")
转到您的Root类,并将其更改为
@XmlRootElement(name = "Root")
我相信您需要
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Child1")
在Child1类中。
再试一次。
该异常告诉您的是,它期望使用名称空间为“”的名称为TestData的元素(您可以忽略名称空间,因为它为空,但是花一两分钟的时间来看一下this,因为它是会在您第一次使用XML时使您失望),这是因为您将根元素定义为TestData。
此外,您提供的数据示例似乎与您设计的类不符。
<Child1>
<Data>
</Data>
</Child1>
public class Child1 {
@XmlElement(name = "ID")
private String ID;
}
为了简洁起见,我不知道您是否为简洁起见而替换了随附的数据,但是您的Java对象将更类似于该XML。
<Child1>
<ID>[String ID value]</ID>
</Child1>