2016-04-11 49 views
0

オブジェクトのセットを列挙型のリストにマップする必要があります。私はすでにenumを文字列に変換するカスタムコンバータを作成しました。例:についてはDozerマッピングからセット<Object>をリスト<ENUM>

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

:私は前述の変換ドーザーは、次のエラーがスローされます開始するJunitsを実行しようとすると、私は< FOOをリストを設定し<はFoo>を変換したい>

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

enum FOO { 
    A,B; 
} 

答えて

1

それは持っているでしょう完全なスタックトレース、マッピングXML、得意先コンバーター、および関連コードを表示した方が良いでしょう。 enumコンストラクタを間違って使用しているため、NoSuchMethodExceptionが発生している可能性があります。

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

} 

とマッピングのxml:

しかし、ここで成功した(私が代わりに「FOO」の「バー」として列挙型をラベル付けしました)列挙型のリストにオブジェクトのセットをマッピングしCustomConverterです:

<?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> 
関連する問題