2017-04-12 10 views
0

"ChildData"요소가 스키마의 "BaseData"요소에 속하지 않지만 "BaseData"요소에 "ChildField"요소가 포함될 수 있도록 xsi : type 특성을 사용하는 xml이 있습니다.xsi : type을 dozer와 함께 사용하는 xml을 매핑하는 방법은 무엇입니까?

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

생성 된 자바 코드는 다음과 같습니다

아이 :

@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를 생성하여 I이 문제를 해결

mapper.map 

방법

답변

0

사용 톰 변환기를 사용하여 BaseClass를 MyClass로 변환합니다. 먼저 BaseClass 인스턴스를 ChildClass로 캐스팅하려고 시도합니다. 성공하면 MyClass 인스턴스에 필드 값을 전달합니다.