【发布时间】:2013-11-05 13:35:12
【问题描述】:
我正在研究 WSDL 和 JAX-WS,这就是我遇到的地方。 当我在 JAX-WS 中编写服务接口时如下:
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld {
@WebMethod
@WebResult(name="helloworldstring")
String getHelloWorldAsString(**@WebParam(name="myname")** String name);
}
生成的 WSDL 有 message 请求声明如下:
<message name="getHelloWorldAsString">
<part **name="myname"** type="xsd:string"></part>
</message>
当我从wsimport 实用程序生成客户端存根时,生成的服务类将name 和partName 都作为“myname”。
如果我在我的服务中根本没有指定 @WebParam,则 WSDL 的部件名称为 arg0,而使用 wsimport 生成的服务存根在其 @ 中同时获得 name 和 partName 作为 arg0 987654334@声明。
如果我在服务类的@WebParam 中同时指定name 和partName,如下所示:
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld {
@WebMethod
@WebResult(name="helloworldstring")
String getHelloWorldAsString(**@WebParam(name="myname", partName="mypartname")** String name);
}
生成的 WSDL 的部件名称为 mypartname。对于@WebParam 声明中的name 和partName,使用wsimport 生成的服务存根也得到mypartname,完全忽略在我的Web 服务中声明的name="myname"。
所以我不明白@WebParam这两个属性的意义。如果我在这两个属性中指定不同的值,应该在 WSDL 中反映什么。
This link 对它们的描述如下:
-
name:指定出现在生成的 WSDL 文档中的参数名称。对于 RPC 绑定,这是表示参数的 wsdl:part 的名称。对于文档绑定,这是表示参数的 XML 元素的本地名称。根据 JAX-WS 规范,默认值为 argN,其中 N 替换为从零开始的参数索引(即 arg0、arg1 等)。 -
partName:指定参数的wsdl:part 元素的name 属性的值。此属性用于文档样式 SOAP 绑定。
但仍然没有从中得到太多的理解。想知道如果我指定不同的name 和partName 会有什么不同。
注意:这一切都是使用 RPC 样式的 SOAP 绑定而不是文档样式进行的。
【问题讨论】:
标签: java web-services soap wsdl jax-ws