2011-03-25 3 views
2

Organisation 개체 목록 (로컬 형식)을 자랑스럽게 만들기 위해 jaxb 정렬/비 정렬을 사용하여 sping ws 끝점을 사용하고 있습니다. 엔드 포인트는 SOAP 1.1이며 요청 메시지에 제공된 매개 변수는 없습니다.어느 스프링이 wax jaxb annotation을 사용하여 xml 요소 이름을 변경합니까?

JAXB는 목록을 잘 처리하지 못하기 때문에 래퍼 클래스를 사용합니다.

@XmlRootElement(name="orgResponse", namespace=....) 
public class OrganisationListWrapper { 

    private ArrayList<Organisation> organisationList; 

    public getOrganisationList() { 
     return organisationList; 
    } 

    public setOrganisationList(ArrayList<Organisation> organisationList) { 
     this.organisationList = organisationList; 
    } 
} 

엔드 포인트 ....

@PayloadRoot(localPart=.... namespace=....) 
@ResponsePayload 
public OrganisationListWrapper getOrganisations() { 
    OrganisationListWrapper wrapper = new OrganisationListWrapper(); 
    wrapper.setOrganisationList(.... call service layer get list ....); 
    return wrapper; 
} 

이 잘 작동하고 내가

<orgResponse> 
    <organisationList> 
     ... contents of organisation 1 
    </organisationList> 
    <organisationList> 
     ... comtents of organisation 2 
    </organisationList> 
    .... etc .... 
</orgResponse> 

기구 클래스는 JAXB가 주석되지와 SOAP 페이로드를 얻을. 이것은 웹 서비스를 통해 처음으로 노출되는 선재 클래스의 큰 목록의 일부입니다. 들어 가지 않고 들어가서 손으로 모두 주석을 달아보십시오.

OrganisationWrapper을 주석으로 orgResponse으로 덮어 쓸 수있었습니다. 자식 요소의 organisationList 이름을 organisation으로 대체하고 싶지만이를 수행하는 주석을 찾을 수 없었습니다.

어레이 목록 이름을 organisation으로 바꿀 수 있지만 제대로 작동 할 것입니다. 여기서는 코딩 기준으로 우리의 목록 이름 끝에 List을 입력해야합니다. 나는 그것을 고집하고 싶다. XmlElement을 시도했지만 jaxb 예외가 발생했습니다.

의견을 보내 주시면 감사하겠습니다.

+1

'organisationList' 필드에'@XmlElement'를 추가하는 것은 길입니다. 당신은 무엇을 시도 했습니까? 그리고 당신은 어떤 예외를 얻었습니까? – skaffman

답변

1

JAXB가 PUBLIC_MEMBER에 대한 액세스 유형을 기본 있기 때문에, 당신은 속성 (게터를) 주석을 드시 필드 :

@XmlElement(name="organisation") 
public getOrganisationList() { 
    return organisationList; 
} 

당신은 필드가 다음 클래스에 다음 주석을 추가 주석하려는 경우 :

@XmlAccessorType(XmlAccessType.FIELD) 
관련 문제