Это обсуждение на Java Ranch Форум очистил это для меня. В частности, этот пример, сделанный Джейсоном Ирвином:
ГЛУБОЙ интерфейс, сгенерированный клиентом (с использованием wsimport):
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface IMathServer {
@WebMethod
@WebResult(name = "addNumsResponse")
public AddNumsResponse addNums(@WebParam(name = "addNums") AddNums parameters);
}
WRAPPED интерфейс, созданный клиентом (с использованием wsimport):
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public interface IMathServer {
@WebMethod
@WebResult(name = "addNumsResponse")
public int addNums(@WebParam(name = "num1") int num1, @WebParam(name = "num2") int num2);
}
Эти обе части кода генерируют одно и то же сообщение:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:addNums xmlns:ns2="http://SoapStyles/">
<num1>1</num1>
<num2>2</num2>
</ns2:addNums>
</S:Body>
</S:Envelope>
Как сказал R Srini в том же обсуждении, в обертке находятся параметры, а не код.
Единственная разница при создании клиентов заключается в том, как вы собираетесь создавать параметры в клиенте, но они оба будут генерировать одно и то же сообщение (свернутое или развернутое) в зависимости от службы WSDL.
С BARE у вас будет только верхний элемент (параметр) с "подпараметрами" внутри. Этот BARE будет отправлен напрямую (без его «упаковки»). В то время как с WRAPPED у вас будут все эти «подпараметры» на первом уровне, и клиент автоматически перенесет их в другой верхний элемент.
Цитирую Джейсон Ирвин:
Был передан только один параметр ("addNums"), и он был "голым" в теле. Во втором случае параметры были "голы" в коде, но "обернуты" JAX-WS во время выполнения.
Надеюсь это поможет!
person
Christian Vielma
schedule
20.08.2013
wsimport
. - person skaffman   schedule 16.03.2011