java - 如何告诉 JAXB,该元素是 Root 的 Child?
问题描述
我有一些 XML 格式的测试数据,我想映射到 POJO。
<Root>
<Child1>
<Data>
</Data>
</Child1>
<Child2>
<Data>
</Data>
</Child2>
</Root>
Child1 是第一个 Object,而 Child2 是第二个。
JAXBContext context = JAXBContext.newInstance(classesToLoad);
Unmarshaller um = context.createUnmarshaller();
Object obj = (Object) um.unmarshal(data);
在这种情况下,对象只是一个占位符
@Getter
@Setter
@XmlRootElement(name = "TestData")
public class Child1 {
@XmlElement(name = "ID")
private String ID;
}
.
这是我现在正在使用的代码,但我得到了这个异常:
javax.xml.bind.UnmarshalException:意外元素(URI:“”,lokal:“TestData”)。预期的元素是: Child1
解决方案
移动注释
@XmlRootElement(name = "TestData")
到您的 Root 类并将其更改为
@XmlRootElement(name = "Root")
我相信你会需要
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Child1")
在 Child1 类中。
再试一次。
异常告诉您的是,它需要一个名称为 TestData 且名称空间为 "" 的元素(您现在可以忽略名称空间,因为它是空白的,但需要一两分钟来查看它,因为它在使用时可能会绊倒您第一次使用 XML),这是因为您将根元素定义为 TestData。
此外,您提供的数据示例似乎与您设计的类不对应。
<Child1>
<Data>
</Data>
</Child1>
public class Child1 {
@XmlElement(name = "ID")
private String ID;
}
为了简洁起见,我不知道您是否为了简洁而替换了随附的数据,但是您的 Java 对象将更类似于此 XML。
<Child1>
<ID>[String ID value]</ID>
</Child1>
推荐阅读
- php - Mysql重复结果
- tfs - 从 TFS 2017 升级到 Azure DevOps - 构建/发布管道
- python - 不和谐音乐机器人与 python
- css - v-dialog 的自定义 z-index
- javascript - 在 React 应用程序上设置 Sass、scss 主题 mixin
- python - 使用换行符在同一打印语句中打印出变量
- python - 绘制每个 x 值的平均值
- c# - Android MediaPlayer如何处理MediaTimeDiscontinuity?
- python - Python Selenium 从 tr 内的 td 使用 xpath 获取数据
- reactjs - 如何清除 React 中的输入字段?