2009-09-07 54 views
2

我在试图映射Date - > Calendar时遇到了InstantiationException。Dozer InstantiationException映射日历类

简单测试如下:

@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 2009-09-07 23:29:30

+0

它在mapper.map()行上引发InstantiationException – 2009-09-08 07:55:18

回答

2

你说得对。这抛出InstantionException(我认为这是一个在推土机中的错误,你会将它提交到他们的错误跟踪系统?)。

但是,它在您将日期< - >日历值不在根级别上时转换。此测试适用于我(推土机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 – 2009-09-09 08:18:04

0

如果将Calendar.class更改为GregorianCalendar.class,则测试将起作用。

+0

我猜OP完全知道它。 – 2009-09-08 21:00:52

+0

这就是为什么我upvoted你的答案;) – 2009-09-08 21:31:08

+0

谢谢 - 但意图不必改变目标类为了做转换。理想情况下,我想抽象地应用我的转换代码,在世界范围内不关心目标类是什么... – 2009-09-09 08:12:49