Запретить фабрике 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 не создает элемент-обертку (как я ожидал, и не будет), и что это была совершенно другая проблема...

Другие вопросы по тегам