自定义转换器上的Dozer,InstantiationException

时间:2012-11-20 13:12:36

标签: mapping converter dozer instantiationexception

我已经编写了自己的客户转换器:

public class MyFancyCustomConverter extends DozerConverter<Integer, AnObject>
{
    public MyFancyCustomConverter(Class<Integer> prototypeA, Class<AnObject> prototypeB)
    {
        super(prototypeA, prototypeB);
    }

    @Override
    public AnObject convertTo(Integer source, AnObject destination)
    {
        // TODO: do something
        return null;
    }

    @Override
    public Integer convertFrom(AnObject source, Integer destination)
    {
        // TODO: do something
        return 0;
    }
}

我的mapping.xml:

<mapping>
    <class-a>java.lang.Integer</class-a>
    <class-b>xyz.AnObject</class-b>
    <field custom-converter="xyz.MyFancyCustomConverter" custom-converter-param="hello">
      <a>this</a>
      <b key="my.key">this</b>
    </field>
</mapping>

但是我得到了这个例外:

org.dozer.MappingException:java.lang.InstantiationException:xyz.MyFancyCustomConverter

知道我做错了什么吗?我想这是因为MyFancyCustomConverter没有默认转换器。但是我不能添加一个,因为DozerConverter没有...

1 个答案:

答案 0 :(得分:13)

public MyFancyCustomConverter(Class<Integer> prototypeA, Class<AnObject> prototypeB)
{
    super(prototypeA, prototypeB);
}

应该是

public MyFancyCustomConverter()
{
    super(Integer.class, AnObject.class);
}

超类需要知道这两个类的运行时类型,并且由于类型擦除,需要传入一个类型标记。