Cri*_*ris 18 java web-services jax-ws
我从一些现有的wsdl中生成了一些WebServices
我使用Maven来做这个,但是生成了一些web服务
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
Run Code Online (Sandbox Code Playgroud)
和其他人一起
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
Run Code Online (Sandbox Code Playgroud)
Jaxb或xjc会自动执行此操作吗?因为我在wsdls中没有任何差异......
小智 27
当"操作"名称,"消息"名称和"元素"名称在某种形状或形式上不同时,将生成BARE Web服务.要将客户端或服务存根自动生成为WRAPPED,所有这三个元素必须相同.
解决方法是编写自己的存根并使用@ RequestWrapper/@ ResponseWrapper注释.
PS:所有portType操作都必须具有"包装"样式请求/响应.即使是最微小的偏差也会默认为BARE.
Chr*_*lma 19
Java Ranch论坛的讨论为我清除了它.特别是Jason Irwin的这个例子:
BARE客户端生成的界面(使用wsimport):
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface IMathServer {
@WebMethod
@WebResult(name = "addNumsResponse")
public AddNumsResponse addNums(@WebParam(name = "addNums") AddNums parameters);
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
这两段代码生成相同的消息:
<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>
Run Code Online (Sandbox Code Playgroud)
正如R Srini在同一讨论中所说的那样,包装的是参数,而不是代码.
生成客户端的唯一区别是您要在客户端中创建params的方式,但它们都将根据服务WSDL生成相同的消息(包装或解包).
使用BARE,您将只有一个带有"子参数"的顶部元素(参数).这一个BARE将直接发送(不"包装"它).使用WRAPPED时,您将在第一级中拥有所有这些"子参数",并且客户端会自动将它们包装在另一个顶级元素中.
引用杰森欧文:
只传递了一个参数("addNums"),并且它在体内是"Bare".在第二个中,参数在代码中是"裸"的,但是在运行时由JAX-WS"包装".
希望这可以帮助!
归档时间: |
|
查看次数: |
33489 次 |
最近记录: |