【问题标题】:How to map an xml, which uses xsi:type with dozer?如何映射使用 xsi:type 和推土机的 xml?
【发布时间】:2017-09-08 12:09:43
【问题描述】:

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

<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;
}

现在终于,我想要这个结构映射到我的结构,但是当我把它放在推土机映射 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

方法

【问题讨论】:

    标签: java xml mapping dozer xsitype


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      相关资源
      最近更新 更多