This discussion at Java Ranch Forum cleared it for me. Specifically this example made by Jason Irwin:
BARE client generated interface (using wsimport):
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface IMathServer {
@WebMethod
@WebResult(name = "addNumsResponse")
public AddNumsResponse addNums(@WebParam(name = "addNums") AddNums parameters);
}
WRAPPED client generated interface (using 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);
}
This both pieces of code generate the same message:
<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>
As said by R Srini in the same discussion what is wrapped are the parameters, not the code.
The only difference generating the clients is the way you are going to create the params in the client, but they both are going to generate the same message (wrapped or unwrapped) depending on the service WSDL.
With BARE you will have only a top element (parameter) with "sub-parameters" inside. This one BARE will be sent directly (without "wrapping" it). While with WRAPPED you will have all this "sub-parameters" in the first level, and the client automatically wrap them in another top element.
Quoting Jason Irwin:
Only one parameter was passed ("addNums") and it was "Bare" in the
body. In the second, the parameters were "bare" in the code, but
"wrapped" at run-time by JAX-WS.
Hope this helps!
wsimport
tool. – Boyette