Я хотел бы сопоставить Java объекты друг с другом, используя Orika в текущей версии 1.5.4 .
С одной стороны, У меня есть неизменяемые объекты, частные конечные свойства которых должны быть установлены из конструктора:
public class Source {
private final String content;
public Source(String content) {
this.content = content;
}
}
С другой стороны, у меня есть только интерфейсы:
public interface Destination {
String getContent();
setContent(String content);
static Books create() {
return TypeFactory.create(Destination.class);
}
}
Я использую универсальный c TypeFactory для создания реализаций (прокси) для этих экземпляров на лету:
public class TypeFactory{
public static <T> T create(Class<T> type) {
// on the fly constructs a class
// that implements the Destination interface
return proxyFactory.createProxyForType(type);
}
}
Прямой способ отобразить эти два с ошибкой с помощью No concrete class mapping defined for source class
:
public Destination map(Source source) {
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(Source.class, Destination.class)
.constructorA("content").byDefault().register();
MapperFacade mapper = mapperFactory.getMapperFacade();
return mapper.map(domainBook, Books.class);
}
Я предполагаю, что это потому что одна сторона - это только интерфейсы, и мне нужно предоставить фабрику, как создавать для них реальные классы, но это все равно не получается:
private static class DestinationFactory implements ObjectFactory<Destination> {
@Override
public Destination create(Object o, MappingContext mappingContext) {
return Destination.create();
}
}
public Destination map(Source source) {
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(Source.class, Destination.class)
.constructorA("content").byDefault().register();
mapperFactory.registerObjectFactory(new DestinationFactory(), Destination.class);
MapperFacade mapper = mapperFactory.getMapperFacade();
return mapper.map(domainBook, Books.class);
}
Может ли кто-нибудь помочь заставить это работать?