首页 > 解决方案 > 当列表和元素具有相同名称时解组列表

问题描述

我有一个棘手的 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 {
...
}

但是因为根元素和列表元素都命名为“供应商”,所以它给了我一个例外:

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

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

有人可以解释什么是处理这个棘手的 XML 的正确方法以及为什么我的解决方法有效吗?

标签: javaxmljaxbunmarshalling

解决方案


您的 xml 无效。

这里的正确方法是先创建xsd schema,然后您将能够使用xjcjava 实用程序解组/生成 java 类。


推荐阅读