Jaxb unmarshaled list为null

时间:2017-10-07 18:31:31

标签: java xml list null jaxb

我从外部API接收xml文件,我无法更改。我正在使用Spring作业,逐项检索药物。我的问题在于解组到Pack的列表,如何正确地对它进行注释,因此它填充了包含在标签之间的对象,因为迄今为止最佳方案是null,如下面所示的配置列表。如何配置类,以便药物包含包的列表(或任何其他结构,如果这不可行)

<drugs xmlns="http://rejestrymedyczne.csioz.gov.pl/rpl/eksport-danych-v1.0">
    <drug name="Zoledronic acid Fresenius Kabi" type="human" [more attributes...]>
        <packs>
             <pack size="1" [more attributes...]/>
             <pack size="4" [more attributes...]/>
        </packs>
    </drug>
    [more drugs...]
</drugs>

代表药物的类别。

//Lombok annotation generating getters/setters, constructors (boiler plate), shouldn't be harmful
@Data
@NoArgsConstructor
@AllArgsConstructor

@XmlRootElement(name = "drugs", namespace = "http://rejestrymedyczne.csioz.gov.pl/rpl/eksport-danych-v1.0")
@XmlAccessorType(XmlAccessType.FIELD)
public class ExternalDrug {

    @XmlAttribute(name = "name")
    private String name;

    @XmlAttribute(name = "type")
    private DrugType type;

    @XmlElementWrapper(name = "packs")
    @XmlElement(name = "pack")
    private List<Pack> packs;
}

这就是Pack

//Again boiler plate
@Data
@NoArgsConstructor
@AllArgsConstructor

@XmlRootElement(name = "Packs")
@XmlAccessorType(XmlAccessType.FIELD)
public class Pack {

    @XmlAttribute(name = "size")
    private List<Pack> ;
}

请记住,我将文件翻译成英文,以便其他人更容易阅读,但我可能会犯这样的错误。

1 个答案:

答案 0 :(得分:0)

在您将XMLElementWrapper和List元素添加到此

之后,它将起作用
@XmlElementWrapper(name="packs", namespace = "http://rejestrymedyczne.csioz.gov.pl/rpl/eksport-danych-v1.0")
@XmlElement(name="pack", namespace ="http://rejestrymedyczne.csioz.gov.pl/rpl/eksport-danych-v1.0")
private List<Pack> packs;