какая пружина с аннотацией jaxb для изменения имени элемента xml - PullRequest
2 голосов
/ 25 марта 2011

Я использую конечную точку 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.

Будем благодарны за любые предложения.

1 Ответ

1 голос
/ 25 марта 2011

Поскольку JAXB по умолчанию использует тип доступа PUBLIC_MEMBER, убедитесь, что вы аннотируете свойство (получатель), а не поле:

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

Если вы хотите аннотировать поле, добавьте следующую аннотацию в ваш класс:

@XmlAccessorType(XmlAccessType.FIELD)
...