2016-04-11 13 views
0

Nesnelerin bir Listesini Enum Listesine eşlemek istiyorum. Kodları dize eşdeğerlerine dönüştürmek için özel bir dönüştürücü oluşturdum. Örn içinSet <Object>'dan Dozer eşleştirmesi, Listenin <ENUM>

org.dozer.MappingException: java.lang.NoSuchMethodException: 

: Ben Dozer aşağıdaki hatayı atar yukarıda belirtilen dönüşüm başlatır Junits çalıştırmayı denediğinizde ben Listeye> Set < Foo dönüştürmek istediğiniz < FOO>

class Foo{ 
    private String FOO; // this contains same data as the enum FOO 
    private String foo1; 
} 

enum FOO { 
    A,B; 
} 

cevap

1

O olurdu Tam yığın izlemesi, xml eşleştirmesi, müşteri dönüştürücü ve ilgili kodları göstermiş olsaydınız daha iyi oldu. Enum yapıcısını yanlış kullandığınız için NoSuchMethodException aldığınızı tahmin etmem tehlikesiyle karşı karşıya kalabilir.

public class EnumClassConverter implements CustomConverter{ 

    public Object convert(Object dest, Object source, Class<?> arg2, Class<?> arg3) { 
     if (source == null) 
      return null; 

     if (source instanceof Set<?>){ 
      Set<Foo> setOfFoos = (Set<Foo>) source; 
      List<Bar> listOfBars = new ArrayList<Bar>(); 
      for (Foo f:setOfFoos){ 
       if (f.getFOO()=="A") listOfBars.add(Bar.A); 
       else listOfBars.add(Bar.B); 
      } 
      return listOfBars; 
     } 
     else if (source instanceof List<?>){ 
      List<Bar> listOfBars = (List<Bar>) source; 
      Set<Foo> setOfFoos = new HashSet<Foo>(); 

      for (Bar b : listOfBars){ 
       Foo f = new Foo(); 
       if (b ==Bar.A){ 
        f.setFOO("A"); 
       } 
       else f.setFOO("B"); 
       setOfFoos.add(f); 
      } 
      return setOfFoos; 
     } 
     else { 
      throw new MappingException("Converter EnumClassConverter " 
       + "used incorrectly. Arguments passed in were:" 
       + dest + " and " + source); 
      } 
    } 

} 

ve haritalama xml:

Ancak, burada başarıyla (yerine 'FON' arasında 'Bar' enum etiketlediğinize) çeteleler bir Listesine Nesnelerin bir Set eşleştiren bir CustomConverter var :

<?xml version="1.0" encoding="UTF-8"?> 
<mappings xmlns="http://dozer.sourceforge.net" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://dozer.sourceforge.net 
      http://dozer.sourceforge.net/schema/beanmapping.xsd"> 
    <mapping> 
     <class-a>beans.FooContainer</class-a> 
     <class-b>beans.BarContainer</class-b> 
     <field custom-converter="converter.EnumClassConverter" > 
      <a>fooSet</a> 
      <b>listOfBars</b> 
     </field>   
    </mapping> 
</mappings> 
İlgili konular