Я пытаюсь сопоставить bean-компонент, который имеет некоторые элементы JAXB, такие как @XmlSeeAlso, @XmlElement, @XmlSchemaType, как свойства для этого класса.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Customer")
@XmlSeeAlso({PersonalCustomer.class, BusinessCustomer.class})
public class Customer extends Role {
@XmlElement(name = "AMLLineOfBusiness")
private LOB amlLineOfBusiness;
// 50 odd properties
//some properties with XmlElement/XmlSchemaType
// getters and setters
}
@Mapper
public interface CustomerMapper {
PersonalCustomer personcalCustomerToPersonalCustomer(PersonalCustomer pc);
@Mappings({
/*Several other ignore mappings*/
@Mapping(target="AMLLineOfBusiness",ignore=true)
})
Customer customerToCustomer(Customer customer);
}
Теперь я сталкиваюсь с проблемами при отображении с помощью mapStruct.
Bean-компонент PersonalCustomer не отображается. Я не вижу этого в ответе. Но при использовании бульдозера работает отлично. Все, что мне нужно сделать, это определить его в сопоставлении в xml конфигурации dozer. Я пробовал подобное в mapStruct. Я определил personcalCustomerToPersonalCustomermethod в интерфейсе mapper с необходимыми сопоставлениями и игнорированием необязательных полей. Хотя реализация есть в mapperImpl, но я не вижу, чтобы она использовалась где-либо в классе impl.
Игнорируя поля с @XmlElement или @XmlSchemaType, я получаю ошибку компиляции при генерации кода impl. Ниже приведена трассировка статистики ошибок. При использовании amlLineOfBusiness возникла ошибка компиляции.
[70,2] ошибка: неизвестное свойство «amlLineOfBusiness» в типе результата com.role.Customer. Вы имели в виду "lineOfBusiness"? [ОШИБКА] -> [Справка 1] org.apache.maven.lifecycle.LifecycleExecutionException: не удалось выполнить цель org.apache.maven.plugins: maven-compiler-plugin: 3.5.1: компиляция (компиляция по умолчанию) в службе проекта -jar: ошибка компиляции C: \ Perforce \ service-jar \ 2018.08.0 \ service-jar \ src \ main \ java \ com \ mapstruct \ mapper \ CustomerMapper.java: [70,2] ошибка: неизвестное свойство «amlLineOfBusiness» в результате введите com.role.Customer. Вы имели в виду "lineOfBusiness"? на org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212) на org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153) на org.apache.maven.lifecycle .internal.MojoExecutor.execute (MojoExecutor.java:145) в org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:108) в org.apache.maven.lifecycle.internal.builderMult.mult $ 1.call (MultiThreadedBuilder.java:188) в org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder $ 1.call (MultiThreadedBuilder.java:184) в java.util.concurrent.FutureTask.run (FutureTask.run : 266) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511) в java.util.concurrent.FutureTask.run (FutureTask.java:266) в java.util.concurrent.ThreadPoolExecutor ( ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor $ Wo rker.run (ThreadPoolExecutor.java:624) в java.lang.Thread.run (Thread.java:748) Вызвано: org.apache.maven.plugin.compiler.CompilationFailureException: сбой компиляции
Вышеупомянутое разрешено, когда я игнорировал значение имени аннотации (@XmlElement (name = "AMLLineOfBusiness")). Я не мог понять, что именно здесь происходит.
По умолчанию mapStruct также отображает поля суперкласса. В моем случае класс Customer также получает свойства Role. Нет другого варианта, кроме использования ignore = true для каждого свойства. Это довольно беспокойно, так как у меня есть 50 нечетных полей и десятки подобных картографов в зависимости от требований к сервису. Я бы хотел, чтобы у mapStruct была функция игнорирования всех полей по умолчанию или стратегия для сопоставления только указанных полей.
Обратите внимание, что здесь используются одинаковые типы источника и назначения. Мне нужно только сопоставить определенные поля в зависимости от требований. Я застрял здесь. Я высоко ценю вашу помощь.
@Mapping
, где вы используетеamlLineOfBusiness
? - person Filip   schedule 30.03.2018