2017-10-06 105 views
1

我有兩個數據集讓我們考慮從JAXb轉換器生成的數據A和數據B.檢查下面的代碼段,在JAXb對象中的推土機映射集合

// 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對象吸氣劑[用於所有] /設定部[非集合字段](在上面的代碼中沒有提及)。當我嘗試使用Dozer API進行映射時,只映射父對象,但在映射集合時將獲得空指針異常。

嘗試以下映射的方法來解決映射問題,

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

但在上述方法的缺陷是,如果對象包含嵌套列表的對象比我不得不提到的所有對象與accessible(true)

我可以嘗試映射所有集合對象的任何其他方法,而不必提及映射配置中的所有映射方案。

+0

如果每個屬性都有setter/getter方法,爲什麼需要將'accessible'設置爲'true'? – araknoid

+0

@araknoid - 錯過了列表部分,糾正了這個問題,因爲那些JaxB生成的導致沒有setter的收集(如列表等) – napster

+0

我們在我的辦公室也面臨這個問題。檢查其他人必須說[這裏](https://stackoverflow.com/questions/13913000/why-doesnt-jaxb-generate-setters-for-lists)。最好是手動創建設置方法,而不是試圖找到Dozer的解決方法。因爲推土機不會將JaxB的問題與收藏相結合 – Ray

回答

1

在項目pom.xml中添加以下參數以生成所有對象(包括集合)的設置器。

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

這將強制爲JaxB中的所有對象生成setters。