I'm new to dozer and I'm trying to create a map for ClassA and ClassB
public class ClassA {
ClassC c;
public ClassC getC() {
return c;
}
public void setC(ClassC c) {
this.c = c;
}
}
public class ClassB {
private String x;
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
}
public abstract class ClassC {
private String x;
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
}
public class ClassD extends ClassC {
}
I tried the mapping below
<mapping>
<class-a>ClassA</class-a>
<class-b>ClassB</class-b>
<field>
<a>c.x</a>
<b>x</b>
</field>
<mapping>
classC is an abstract class and ClassD is a concrete. When I map A->B there is no problem but when I map B->A, I'm getting InstantiationException. I suspect that the dozer is trying to instantiate abstract class classC. Any attribute to tell dozer to use ClassD? Please help.
[EDIT1] - Added the full class declaration.
Ok got it. You need to use create-method
<mapping>
<class-a create-method="ClassAFactory.createClassA">ClassA</class-a>
<class-b>ClassB</class-b>
<field>
<a>c.x</a>
<b>x</b>
</field>
<mapping>
public class ClassAFactory {
public static ClassA createClassA(){
ClassA classA = new ClassA();
classA.setC(new ClassD());
return classA;
}
}