2017-04-12 2 views
0

私はxsi:type属性を使用するxmlを持っているので、 "BaseData"要素は "ChildField"要素がスキーマの "BaseData"要素のメンバではないにもかかわらず "ChildField"要素を含むことができます:xsi:typeを使用するxmlをdozerにマップするにはどうすればいいですか?

<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) 

IをCUSを作成することで、私はこの問題を解決し

mapper.map 

方法

答えて

0

使用tomClassをBaseClassからMyClassに変換します。まず、BaseClassインスタンスをChildClassにキャストしようとします。成功した場合は、フィールド値をMyClassインスタンスに渡します。

関連する問題