防止Orika工厂为null值创建对象

时间:2017-10-26 14:11:40

标签: java null jaxb factory orika

我有一个从DTO模型到JAXB生成的数据模型的映射,该数据模型充满了JAXBElement<>包装对象。

例如,有一个Person定义为(getters和setter被省略):

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的映射没有名称(名称等于null)将导致Person元素具有名称成员,其值设置为null。通过显示执行类映射后生成的XML,可以更好地解释这一点:

<Person>
    <Name>
        <value></value>
    </Name>
</Person>

在我的例子中,这个XML是无效的,当有一个Name元素时,它的值应该总是非null。因此,XML应该是:

<Person>
</Person>

是否可以阻止Orika构造Name对象,知道它的值将被设置为null?

1 个答案:

答案 0 :(得分:0)

一天后以清醒的头脑再次浏览代码,事实证明Orika没有创建包装元素(正如我预期的那样)并且它完全是一个不同的问题......