JAXb 对象中的 Dozer 映射集合
Dozer mapping collection in JAXb objects
我有两个数据集让我们考虑从 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;
}
这些是生成的 JaxB 对象,具有 getter [for all] /setter [for non collection fields](上面的代码中未提及)。当我尝试使用 Dozer API 进行映射时,仅映射了父对象,但在映射集合时会出现空指针异常。
尝试了以下映射方法来解决映射问题,
mapping(CompanyA.class, CompanyB.class)
.fields(field("empList").accessible(true), field("empList").accessible(true));
但上述方法的缺陷在于,如果对象包含嵌套列表对象,那么我必须提及所有具有 accessible(true)
的对象
我可以尝试映射所有集合对象的任何其他方法,而无需在映射配置中提及所有映射场景。
在项目 pom.xml 中添加以下参数以生成所有对象(包括集合)的设置器。
<configuration>
<arguments>
<argument>-XtoString</argument>
<argument>-Xsetters</argument>
<argument>-Xsetters-mode=direct</argument>
</arguments>
....
</configuration>
这将强制为来自 JaxB 的所有对象生成 setter。
我有两个数据集让我们考虑从 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;
}
这些是生成的 JaxB 对象,具有 getter [for all] /setter [for non collection fields](上面的代码中未提及)。当我尝试使用 Dozer API 进行映射时,仅映射了父对象,但在映射集合时会出现空指针异常。
尝试了以下映射方法来解决映射问题,
mapping(CompanyA.class, CompanyB.class)
.fields(field("empList").accessible(true), field("empList").accessible(true));
但上述方法的缺陷在于,如果对象包含嵌套列表对象,那么我必须提及所有具有 accessible(true)
我可以尝试映射所有集合对象的任何其他方法,而无需在映射配置中提及所有映射场景。
在项目 pom.xml 中添加以下参数以生成所有对象(包括集合)的设置器。
<configuration>
<arguments>
<argument>-XtoString</argument>
<argument>-Xsetters</argument>
<argument>-Xsetters-mode=direct</argument>
</arguments>
....
</configuration>
这将强制为来自 JaxB 的所有对象生成 setter。