2017-10-06 17 views
1

私は2つのデータセットを持ち、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でマッピングしようとすると、親オブジェクトのみがマッピングされますが、マッピングコレクション中にはNULLポインタ例外が発生します。

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

、マッピングの問題を解決するためのマッピング・アプローチの下にしようとしたが、上記のアプローチの欠陥は、オブジェクトがネストされたリストオブジェクトが含まれている場合、私はaccessible(true)

ですべてのオブジェクトのために言及する必要がありよりも、ということです

他のアプローチでは、すべてのコレクションオブジェクトをマップすることができます。マッピングのシナリオをすべてマッピングする必要はありません。

+0

プロパティごとにセッター/ゲッターメソッドがある場合、なぜ 'accessible'を' true'に設定する必要がありますか? – araknoid

+0

@araknoid - リストのようなコレクションを作成しないJaxBが生成されたもの(リストなど) – napster

+0

私たちは私のオフィスでもこの問題に直面しました。他の人が[ここ](https://stackoverflow.com/questions/13913000/why-doesnt-jaxb-generate-setters-for-lists)と言うことを確認してください。 Dozerで回避策を見つけるのではなく、手動でsetメソッドを作成するほうが良いかもしれません。 DozerはJaxBのコレクションに関する問題を考慮していないので、 – Ray

答えて

1

すべてのオブジェクト(コレクションを含む)のセッターを生成するために、以下の引数をプロジェクトpom.xmlに追加しました。

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

これは、強制的にJaxBのすべてのオブジェクトのセッターを生成します。

関連する問題