Запретить фабрике Orika создавать объекты с нулевым значением
У меня есть сопоставление из модели DTO с сгенерированной JAXB моделью данных, которая полна объектов-оболочек JAXBElement<>.
Например, есть класс Person, определенный как (методы получения и установки опущены):
public class Person {
private JAXBElement<Name> name;
}
Имя определяется как:
public class Name {
private String value;
}
Для создания JAXBElement я создал ObjectFactory:
public class NameFactory extends ObjectFactory<JAXBElement<Name>> {
protected JAXBElement<Name> createObject(@Nonnull Class<?> context) {
// here, ObjectFactory is the JAXB generated ObjectFactory
return new ObjectFactory().createName();
}
}
В моем ConfigurableMapper я создаю отображение класса из PersonDto в Person следующим образом:
factory.createClassMap(PersonDto.class, Person.class)
.field("name", "name.value.value")
.register;
С этой конфигурацией отображение PersonDto без имени (имя равно нулю) приведет к элементу Person, у которого есть элемент имени со значением, равным нулю. Это, вероятно, лучше объяснить, показывая XML, который генерируется после выполнения сопоставления классов:
<Person>
<Name>
<value></value>
</Name>
</Person>
В моем случае этот XML недопустим, когда есть элемент Name, его значение всегда должно быть ненулевым. Поэтому XML должен быть:
<Person>
</Person>
Можно ли помешать Орике создать объект Name, зная, что его значение будет нулевым?
1 ответ
Проходя через день код снова с ясным разумом, выясняется, что Orika не создает элемент-обертку (как я ожидал, и не будет), и что это была совершенно другая проблема...