哪个spring ws jaxb注释改变xml元素名称

时间:2011-03-25 11:38:35

标签: jaxb spring-ws

我正在使用带有jaxb编组/解组的sping ws端点来自豪地列出Organisation个对象(我们的本地类型)。端点是SOAP 1.1,请求消息上没有提供参数。

我理解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>

Organization类不是JAXB注释的。它是首次通过Web服务公开的大量预先存在的类的一部分。试图不用进去并手动注释它们。

我能够在OrganisationWrapper注释中使用orgResponse覆盖名称XmlRootElement。我想用organisationList覆盖子元素中的organisation名称,但是无法找到执行此操作的注释。

我可以用organisation替换数组列表名称,它可以正常工作,但我们的编码标准要求我们将List放在列表名称的末尾。我想尝试坚持下去。我尝试了XmlElement,但这产生了一个jaxb异常。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

因为JAXB默认访问类型为PUBLIC_MEMBER,所以请确保注释属性(getter)而不是字段:

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

如果要注释该字段,请将以下注释添加到您的类中:

@XmlAccessorType(XmlAccessType.FIELD)