Поскольку JAX-WS полагаются на JAXB, и поскольку я наблюдал код, распаковывающий XML-компонент, в эталонной реализации JAX-B, я полагаю, что разницы нет, и клиент JAXWS всегда возвращает пустую коллекцию, даже веб-сервис результат был нулевым элементом:
public T startPacking(BeanT bean, Accessor<BeanT, T> acc) throws AccessorException {
T collection = acc.get(bean);
if(collection==null) {
collection = ClassFactory.create(implClass);
if(!acc.isAdapted())
acc.set(bean,collection);
}
collection.clear();
return collection;
}
Я согласен, что для лучшей совместимости сервисные контракты должны быть не двусмысленными и избегать таких различий, но кажется, что вызываемая мной служба JAX-WS (размещенная на сервере Jboss с реализацией Jbossws) всегда возвращает, как ожидается, нуль пустая коллекция (протестирована с SoapUI).
Я использовал для моего тестового кода, сгенерированного wsimport.
Возвращаемый элемент определяется как:
@XmlElement(name = "return", nillable = true)
protected List<String> _return;
Я даже проверял, чтобы изменить метод класса ответа Response с:
public List<String> getReturn() {
if (_return == null) {
_return = new ArrayList<String>();
}
return this._return;
}
до
public List<String> getReturn() {
return this._return;
}
но безуспешно.
Любая полезная информация / комментарии по этой проблеме приветствуются!