如何映射xml,它使用xsi:type和doz​​er?

时间:2017-04-12 15:45:47

标签: java xml mapping dozer xsitype

我有一个xml,它使用xsi:type属性,因此“BaseData”元素可以包含“ChildField”元素,尽管“ChildField”元素不是模式中“BaseData”元素的成员: / p>

<BaseData xsi:type="Child">
    <ChildField>value</ChildField>
</BaseData>

生成的java代码是:

子:

@XmlSeeAlso({
    Child.class,
})
public class BaseData {}

基地:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Child", propOrder = {
    "childField"
})
public class Child extends BaseData
{
    @XmlElement(name = "ChildField")
    protected String childField;
}

现在终于,我希望这个结构映射到我的结构,但当我把它放在dozer映射xml文件中时,它失败了:

<field>
    <a>baseData</a>
    <b>myData</b>
    <a-hint>BaseData,Child</a-hint>
    <b-hint>MyClass</b-hint>
</field>

<field>
    <a>baseData.childField</a>
    <b>myData.myField</b>
</field>

我得到的例外是:

org.dozer.MappingException: No read or write method found for field (baseData.childField) in class (class BaseData)

我用

mapper.map

方法

1 个答案:

答案 0 :(得分:0)

我通过创建一个将BaseClass转换为MyClass的自定义转换器解决了这个问题。它首先尝试将BaseClass实例转换为ChildClass。如果成功,则将字段值传递给MyClass实例。