Orika - Определение вызова конструктора без регистрации ObjectFactory
Мне нужно сопоставить два класса с Orika, OrikaA и OrikaB. У класса OrikaB есть конструктор с одним параметром, который не существует в классе OrikaA. Для сопоставления OrikaA с OrikaB я использовал пользовательскую ObjectFactory:
public class OrikaA {
String fieldA;
public OrikaA(String fieldA) {
this.fieldA = fieldA;
}
public String getFieldA() {
return fieldA;
}
}
public class OrikaB {
String fieldA;
String fieldB;
public OrikaB(String fieldA, String fieldB) {
this.fieldA = fieldA;
this.fieldB = fieldB;
}
public String getFieldA() {
return fieldA;
}
public String getFieldB() {
return fieldB;
}
}
@Test
public void orikaObjectFactoryTest() {
mapperFactory = new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(OrikaA.class, OrikaB.class).register();
Type<OrikaA> orikaAType = TypeFactory.valueOf(OrikaA.class);
Type<OrikaB> orikaBType = TypeFactory.valueOf(OrikaB.class);
ObjectFactory<OrikaA> objectFactoryOrikaA = (Object o, MappingContext mappingContext) -> {
OrikaB source = (OrikaB) o;
return new OrikaA(source.getFieldA());
};
ObjectFactory<OrikaB> objectFactoryOrikaB = (Object o, MappingContext mappingContext) -> {
OrikaA source = (OrikaA) o;
return new OrikaB(source.getFieldA(), null);
};
mapperFactory.registerObjectFactory(objectFactoryOrikaA, orikaAType, orikaBType);
mapperFactory.registerObjectFactory(objectFactoryOrikaB, orikaBType, orikaAType);
MapperFacade mapper = mapperFactory.getMapperFacade();
OrikaA orikaA = new OrikaA("text");
OrikaB orikaB = mapper.map(orikaA, OrikaB.class);
assertEquals(orikaA.getFieldA(), orikaB.getFieldA());
assertNull(orikaB.getFieldB());
}
Есть ли другой способ выполнить ту же задачу без использования пользовательской ObjectFactory?