それは持っているでしょう完全なスタックトレース、マッピング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>
出典
2017-03-21 19:39:05
Ray