我正在研究 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
for request 声明如下:
<message name="getHelloWorldAsString">
<part **name="myname"** type="xsd:string"></part>
</message>
当我从wsimport
实用程序生成客户端存根时,生成的服务类同时获取name
和partName
作为“myname”。
如果我@WebParam
在我的服务中根本没有指定,则 WSDL 将获取部件名称,arg0
而使用生成的服务存根wsimport
获取两者name
并partName
在arg0
其@webParam
声明中获取。
如果我在我的服务类中同时指定和,name
如下所示:partName
@WebParam
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld {
@WebMethod
@WebResult(name="helloworldstring")
String getHelloWorldAsString(**@WebParam(name="myname", partName="mypartname")** String name);
}
生成的 WSDL 的部件名称为mypartname
. 此外,使用wsimport
getsmypartname
和声明生成的服务存根,完全忽略了我的webservice 中声明的。name
partName
@WebParam
name="myname"
所以我不明白这两个属性的意义@WebParam
。如果我在这两个属性中指定不同的值,应该在 WSDL 中反映什么。
此链接将它们描述如下:
name
:指定出现在生成的 WSDL 文档中的参数名称。对于 RPC 绑定,这是表示参数的 wsdl:part 的名称。对于文档绑定,这是表示参数的 XML 元素的本地名称。根据 JAX-WS 规范,默认值为 argN,其中 N 替换为从零开始的参数索引(即 arg0、arg1 等)。partName
: 指定参数的 wsdl:part 元素的 name 属性的值。此属性用于文档样式 SOAP 绑定。
但仍然没有从中得到太多的理解。想知道如果我指定不同的name
and会有什么不同partName
。
注意:这一切都是使用 RPC 样式的 SOAP 绑定而不是文档样式来完成的。