当列表和元素具有相同名称时解组列表

时间:2019-11-11 15:12:42

标签: java xml jaxb unmarshalling

我要解组一个棘手的XML:

<suppliers>
<suppliers id="1"/> 
...
<suppliers_options>
<suppliers_options supplr_id="1" option_type_id="1"/>
...
</suppliers_options>
<suppliers_ratios>
<spr site_id="1" supplr_id="1" ratio="0"/>
...
</suppliers_ratios>
</suppliers>

我的初衷是做类似的事情:

@XmlRootElement(name = "suppliers")
public class SupplierDto {
    @XmlElement(name = "suppliers")
    private Supplier suppliers;

    @XmlElementWrapper(name = "suppliers_options")
    @XmlElement(name = "suppliers_options")
    private List<SuppliersDistrib> suppliersOptions;

    @XmlElementWrapper(name = "suppliers_ratios")
    @XmlElement(name = "sr")
    private List<SuppliersRatio> suppliersRatios;
}

@XmlRootElement(name = "suppliers")
public class Supplier {
...
}

但是因为root元素和list元素都命名为“ suppliers”,所以给了我一个例外:

java.lang.ClassCastException: class _.Supplier cannot be cast to _.SupplierDto (_.Supplier and _.SupplierDto are in unnamed module of loader 'app')

当我在供应商类上删除 @XmlRootElement(name =“ suppliers”)时,它开始正确地解组。

有人可以解释处理这种棘手的XML的正确方法是什么,为什么我的解决方法行得通吗?

1 个答案:

答案 0 :(得分:0)

您的xml无效。

这里的正确方法是首先创建xsd schema,然后您就可以使用xjc java实用工具来解组/生成Java类。