我正在编写一个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”)批注

09-27 00:28