2017-10-06 1 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로 매핑을 시도했지만 부모 개체 만 매핑되었지만 매핑 컬렉션 중에 null 포인터 예외가 발생합니다. 매핑 문제를 해결하기 위해 매핑 방법 아래 시도

,

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를 사용하여 대안을 찾기보다는 수동으로 set 메소드를 만드는 것이 더 좋을 수도 있습니다. Dozer는 JaxB의 콜렉션을 고려하지 않습니다. – Ray

답변

1

모든 개체 (모음 포함)의 설정자를 생성하려면 프로젝트 pom.xml에 아래 인수가 추가되었습니다.

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

이렇게하면 JaxB의 모든 개체에 대한 설정자가 강제로 생성됩니다.