2009-09-07 7 views
2

Je reçois une InstantiationException lorsque j'essaie de mapper Date -> Calendrier.Dozer InstantiationException mapping Classe du calendrier

Simple test suit:

@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); 
    } 

Selon le docs, cela est pris en charge hors de la boîte (même si le calendrier est abstrait). N'importe qui a eu l'expérience avec ceci et capable de signaler ce que je fais mal?

+0

quel est le résultat du test? – skaffman

+0

Il lance une InstantiationException sur la ligne mapper.map() –

Répondre

2

Vous avez raison. Cela jette InstantionException (je considère cela comme un bug dans le jeu. Souhaitez-vous le déposer dans leur système de suivi des bogues?).

Cependant. Cela fonctionne lorsque vous convertissez la date < -> valeurs de calendrier pas sur le niveau racine. Ce test fonctionne pour moi (bouteur 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

Merci. Je peux avoir à regarder dynamiquement avec une petite magie de proxy. Bug déposé: https://sourceforge.net/tracker/?func=detail&aid=2855016&group_id=133517&atid=727368 –

0

Si vous changez Calendar.class pour GregorianCalendar.class les travaux d'essai.

+0

Je suppose que OP est totalement conscient de cela. –

+0

Voilà pourquoi j'ai upvoted votre réponse;) –

+0

Merci - mais l'intention de ne pas avoir à changer la classe de destination afin de faire la conversion. Idéalement, je voudrais juste appliquer mon code de conversion de manière abstraite, sans se soucier du monde de la classe de destination ... –