我有一个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
方法
答案 0 :(得分:0)
我通过创建一个将BaseClass转换为MyClass的自定义转换器解决了这个问题。它首先尝试将BaseClass实例转换为ChildClass。如果成功,则将字段值传递给MyClass实例。