Массивы в методе SOAP Параметры, сгенерированные через JAX-WS? - PullRequest
3 голосов
/ 06 марта 2012

Я создаю сервис SOAP на Java с аннотациями JAX-WS. Среди прочего мне интересно, как аннотировать параметры массива в моих методах. В тот момент, когда я генерирую wsdl из моего аннотированного интерфейса, а затем снова генерирую java-классы из этого wsdl (я делаю это для тестирования, в обоих случаях с использованием Apache cxf), он генерирует классы для хранения параметров массива.

Пример:

 @WebService(name="sillyService",
    ...
)
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.BARE)
public interface SillyService {
    public String doSillyThings(
         @WebParameter(name = "stupid") StupidData[] stupid;
    );
}

Где StupidData - это другой класс, аннотированный как этот

@XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement(name = "StupidData")
public class StupidData {
@XmlElement(name = "datapoint")
String datapoint;
}

Затем вместо Array в сгенерированных классах Parameter становится новым классом StupidDataArray, в котором имеется поле, являющееся массивом StupidData.

Любой способ заставить его принимать массив как параметр напрямую? Спасибо ...

1 Ответ

1 голос
/ 26 сентября 2017

В моем случае код, сгенерированный apache CXF из файлов WSDL, включает в себя ArrayOfXXX классы с одним методом getXXX(), возвращающим List.Автоматически сгенерированный Javadoc этого метода сообщает:

Этот метод доступа возвращает ссылку на текущий список, а не снимок.Поэтому любые изменения, которые вы вносите в возвращаемый список, будут присутствовать внутри объекта JAXB.Вот почему нет метода set для свойства guid.Например, чтобы добавить новый элемент, сделайте следующее: getXXX().add(newItem);

Чтобы ответить на ваш вопрос, вы не можете передать собственный массив в метод, но вы можете передать класс Array после того, как выдобавили элементы в свой базовый список.Для этого вы извлекаете инкапсулированный List из оболочки-массива, используя getXXX(), и добавляете в него элементы.

...