Я использую конечную точку sping ws с jaxb marshalling / unmarshalling, чтобы гордиться списком 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>
Класс организации не аннотирован JAXB. Это часть большого списка уже существующих классов, которые впервые открываются через веб-сервисы. Попытка обойтись без входа и аннотировать их всех вручную.
Мне удалось переопределить имя OrganisationWrapper
с помощью orgResponse
в аннотации XmlRootElement
. Я хотел бы переопределить имя organisationList
в дочернем элементе с помощью organisation
, но не смог найти аннотацию, которая делает это.
Я могу заменить имя списка массивов на organisation
, и оно будет работать нормально, но наш стандарт кодирования здесь требовал от нас ставить List
в конце имен наших списков. Я хотел бы попытаться придерживаться этого. Я попытался XmlElement
, но это вызвало исключение jaxb.
Будем благодарны за любые предложения.