如何映射JAXB的对象列表?

时间:2013-02-11 10:43:38

标签: java jaxb unmarshalling

  

注:

     

我不需要创建java对象,因为我只需要检查   一些价值观,但我没有找到任何解释它们作为通用的东西   对象或树或任何东西。像JsonNode这样的东西   杰克逊。如果这是可能的让我知道,所以我可以避免所有这些混乱   用对象来映射一切。

现在出现问题:

我要解组一个简单的xml,但结果总是为null。我尝试了不同的注释,但如果它们没有失败,结果就是null。

这似乎与this question的情况相同,但使用相同的注释无效。

xml类似于:

<ServiceList>
   <Service Id="1" Code="c" Name="name" ServiceRegistrationStatusID="3" CheckedRegistrationStatusID="2" />
</ServiceList>

我正在解开它:

ServiceList list = JAXB.unmarshal(new StringReader(xml), ServiceList.class);

所以我创建了两个这样的内部类:

@XmlRootElement
public static class ServiceList {
    private List<Service> services;

    public List<Service> getServices() { return services; }
    @XmlElementWrapper(name = "ServiceList")
    @XmlElement(name = "Service")
    public void setServices(List<Service> services) { this.services = services; }

}

@XmlRootElement(name = "Service")
public static class Service {
    private String id;
    private String code;
    private String name;
    private String serviceRegistrationStatusID;
    private String checkedRegistrationStatusID;

    public String getId() {
        return id;
    }
    @XmlAttribute(name = "Id")
    public void setId(String id) {
        this.id = id;
    }
    public String getCode() {
        return code;
    }
    @XmlAttribute(name = "Code")
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    @XmlAttribute(name = "Name")
    public void setName(String name) {
        this.name = name;
    }
    public String getServiceRegistrationStatusID() {
        return serviceRegistrationStatusID;
    }
    @XmlAttribute(name = "ServiceRegistrationStatusID")
    public void setServiceRegistrationStatusID(String serviceRegistrationStatusID) {
        this.serviceRegistrationStatusID = serviceRegistrationStatusID;
    }

    public String getCheckedRegistrationStatusID() {
        return checkedRegistrationStatusID;
    }
    @XmlAttribute(name = "CheckedRegistrationStatusID")
    public void setCheckedRegistrationStatusID(String checkedRegistrationStatusID) {
        this.checkedRegistrationStatusID = checkedRegistrationStatusID;
    }

}

我在静态方法中解组xml,所以我不得不把pojos作为静态。

对此有何帮助?

提前致谢。

1 个答案:

答案 0 :(得分:5)

尝试删除@XmlElementWrapper(name = "ServiceList"),它应该可以正常工作