我正在编写一个 Java 类,它获取 Web 服务的输出并填充一个 bean。该服务返回由 JAXB 生成的代码转换为 Java 对象的 XML。为了对此进行单元测试,我想为各个部分创建 XML 片段并将它们转换为相应的对象以进行测试。
JAXB 类开始:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ItemDef", namespace = "http://localhost/schema", propOrder = {
"a",
"b",
"c"
})
public class ItemDef {
我有以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<Item xmlns="http://localhost/schema">
</Item>
以及以下 Java 代码:
JAXBContext context = JAXBContext.newInstance(ItemDef.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
ItemDef item = (ItemDef) unmarshaller.unmarshal(xmlFile);
导致以下异常:
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://localhost/schema", local:"Item"). Expected elements are (none)
我尝试了名称的不同变体,所以这似乎不是问题所在。我认为问题在于 ItemDef
是一种类型和 @XmlType
而不是 @XmlElement
。有没有办法让 JAXB 接受这个部分组件?
最佳答案
您错过了 ItemDef 顶部的 @XmlRootElement(name="Item",namespace="http://localhost/schema") 注释
关于java - 解码 XmlType 以在 Java 中进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9893351/