2011-03-25 62 views
2

我正在使用帶jaxb編組/解組的sping ws端點來引用Organisation對象(我們的本地類型)的列表。該端點是SOAP 1.1,請求消息中沒有提供參數。哪些春天ws jaxb註釋更改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; 
} 

這工作得很好,我得到一個SOAP有效載荷與

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

組織類不JAXB註釋。它是第一次通過Web服務公開的預先存在的類的大量列表的一部分。試圖通過無需手動進入和註釋他們。

我可以在XmlRootElement註釋中覆蓋名稱OrganisationWrapper並使用orgResponse。我想用organisation覆蓋子元素中的organisationList名稱,但一直未能找到執行此操作的註釋。

我可以organisation替換數組列表名稱,它會正常工作,但在這裏,我們的編碼標準要求我們把List在我們列表中的名稱結束。我想試着堅持下去。我試過XmlElement,但是這產生了jaxb異常。

任何建議,將不勝感激。

+1

將'@ XmlElement'添加到'organisationList'字段是要走的路。你嘗試了什麼,你有什麼異常? – skaffman 2011-03-25 12:04:00

回答

1

因爲JAXB默認接入類型PUBLIC_MEMBER,請務必標註屬性(吸氣),而不是現場:

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

如果你想註釋則字段以下標註添加到類:

@XmlAccessorType(XmlAccessType.FIELD)