我正在编写一个Java类,该类接受Web服务的输出并填充一个bean。该服务返回XML,该XML通过JAXB生成的代码转换为Java对象。为了对此进行单元测试,我想为各个部分创建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”)批注