我正在研究 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 messagefor 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. 此外,使用wsimportgetsmypartname和声明生成的服务存根,完全忽略了我的webservice 中声明的。namepartName@WebParamname="myname"
所以我不明白这两个属性的意义@WebParam。如果我在这两个属性中指定不同的值,应该在 WSDL 中反映什么。
此链接将它们描述如下:
name:指定出现在生成的 WSDL 文档中的参数名称。对于 RPC 绑定,这是表示参数的 wsdl:part 的名称。对于文档绑定,这是表示参数的 XML 元素的本地名称。根据 JAX-WS 规范,默认值为 argN,其中 N 替换为从零开始的参数索引(即 arg0、arg1 等)。partName: 指定参数的 wsdl:part 元素的 name 属性的值。此属性用于文档样式 SOAP 绑定。
但仍然没有从中得到太多的理解。想知道如果我指定不同的nameand会有什么不同partName。
注意:这一切都是使用 RPC 样式的 SOAP 绑定而不是文档样式来完成的。