在JAXb对象中的推土机映射集合

时间:2017-10-06 14:16:03

标签: java jaxb dozer

我有两个数据集让我们考虑从JAXb转换器生成的数据A和数据B.请查看以下代码段,

// Data A    
public class CompanyA {
    private List<EmployeeA> empList;
}

public class EmployeeA{
    private List<AddressA> addList;
}

public class AddressA{
    private String city;
}

// Data B    
public class CompanyB {
    private List<EmployeeB> empList;
}

public class EmployeeB{
    private List<AddressB> addList;
}

public class AddressB{
    private String city;
}

这些是使用getter [for all] / setter [用于非收集字段]生成的JaxB对象(上面的代码中没有提到)。当我尝试使用Dozer API进行映射时,仅映射父对象,但在映射集合时将获得空指针异常。

尝试下面的映射方法来解决映射问题,

mapping(CompanyA.class, CompanyB.class)
                .fields(field("empList").accessible(true), field("empList").accessible(true));

但上述方法的缺陷是,如果对象包含嵌套列表对象,那么我必须为accessible(true)

的所有对象提及

我可以尝试映射所有集合对象的任何其他方法,而不提及映射配置中的所有映射方案。

1 个答案:

答案 0 :(得分:2)

在项目pom.xml中添加了以下参数,以生成所有对象(包括集合)的setter。

<configuration>
    <arguments>
       <argument>-XtoString</argument>
       <argument>-Xsetters</argument>
       <argument>-Xsetters-mode=direct</argument>
    </arguments>
    ....
</configuration>

这将强制为JaxB中的所有对象生成setter。