我正在使用带有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异常。
任何建议都将不胜感激。
答案 0 :(得分:1)
因为JAXB默认访问类型为PUBLIC_MEMBER,所以请确保注释属性(getter)而不是字段:
@XmlElement(name="organisation")
public getOrganisationList() {
return organisationList;
}
如果要注释该字段,请将以下注释添加到您的类中:
@XmlAccessorType(XmlAccessType.FIELD)