2009-09-07 3 views
2

Date -> Calendar를 매핑하려고 할 때 InstantiationException이 발생합니다.Dozer InstantiationException 매핑 Calendar 클래스

간단한 테스트는 다음과 같습니다

@Test 
    public void testConversion() 
    { 
     GregorianCalendar cal = new GregorianCalendar(2009, 2, 3); 
     Date sourceValue = cal.getTime(); 
     DozerBeanMapper mapper = new DozerBeanMapper(); 
     Object result = mapper.map(sourceValue, Calendar.class); 
    } 

docs에 따르면,이 상자 밖으로 지원 (달력 추상적 인 경우에도). 누구나 이것에 대한 경험이 있고 내가 잘못하고있는 것을 지적 할 수 있습니까?

+0

테스트 결과는 무엇입니까? – skaffman

+0

mapper.map() 줄에 InstantiationException이 발생합니다. –

답변

2

당신 말이 맞습니다. 이것은 InstantionException을 던집니다. (이걸 도저에있는 버그라고 생각합니다. 버그 추적 시스템에 파일을 등록 하시겠습니까?).

그러나. 루트 수준이 아닌 Calendar 값을 <으로 변환하면 작동합니다. 이 테스트는 (5.1 도저) 나를 위해 작동 :

public static class Source { 
     private Date value; 
     public void setValue(Date value) { 
      this.value = value; 
     } 
     public Date getValue() { 
      return value; 
     } 
    } 

    public static class Target { 
     private Calendar value; 
     public void setValue(Calendar value) { 
      this.value = value; 
     } 
     public Calendar getValue() { 
      return value; 
     } 
    } 


    @Test 
    public void testConversion() 
    { 
     final GregorianCalendar cal = new GregorianCalendar(2009, 2, 3); 
     Source source = new Source(){{ setValue(cal.getTime());}}; 

     DozerBeanMapper mapper = new DozerBeanMapper(); 
     Target result = (Target) mapper.map(source, Target.class); 
     assertEquals(cal.getTimeInMillis(), result.getValue().getTimeInMillis()); 
    } 
+0

감사합니다. 나는 약간의 프록시 마법으로 이것을 동적으로 수행해야 할 것이다. 버그 접수 : https://sourceforge.net/tracker/?func=detail&aid=2855016&group_id=133517&atid=727368 –

0

당신은 테스트 작업을 GregorianCalendar.class하는 Calendar.class를 변경하는 경우.

+0

OP가 완전히 알고 있다고 생각합니다. –

+0

그 이유는 내가 당신의 대답을 upvoted;) –

+0

고마워 -하지만 대상 클래스를 변경하지 않아도 변환을 할 수 있습니다. 이상적으로, 대상 클래스가 무엇인지에 대해 신경 쓰지 않고 추상적으로 변환 코드를 적용하고 싶습니다 ... –