2017-04-12 71 views
0

我有一個xml,它使用xsi:type屬性,所以儘管「ChildField」元素不是模式中的「BaseData」元素的成員,「BaseData」元素可以包含「ChildField」元素:如何映射一個xml,它使用xsi:type和推土機?

<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 

方法

回答

0

我解決了這個問題,通過創建一個CUS Tom轉換器將BaseClass轉換爲MyClass。它首先嚐試將BaseClass實例投射到ChildClass。如果成功,它將字段值傳遞給MyClass實例。