我在研究WSDL和JAX,这就是我遇到这种情况的地方。当我用JAX编写服务接口时,如下所示:
@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
生成的服务存根在其@webParam
声明中同时获得name
和partName
作为arg0
。
如果我在服务类中同时在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
获取mypartname
为name
和partName
of @WebParam
声明生成的服务存根完全忽略了在webservice中声明的name="myname"
。
所以我不明白@WebParam
这两个性质的意义。如果我在这两个属性中指定了不同的值,那么WSDL中应该反映什么。
这个链接对它们的描述如下:
name
:指定在生成的WSDL文档中出现的参数的名称。对于RPC绑定,这是wsdl的名称:表示参数的一部分。对于文档绑定,这是表示参数的XML元素的本地名称。根据JAX规范,缺省值是argN,其中N被基于零的参数索引(即arg0、arg1等)所取代。partName
:指定参数的wsdl:part元素的name属性的值。此属性用于文档样式SOAP绑定。但还是没有得到太多的理解。我想知道如果我指定不同的name
和partName
会有什么不同。
注意:这一切都是用RPC样式、SOAP绑定而不是文档样式来完成的。
发布于 2013-10-26 09:18:58
让我们看看规范对它的说明(JSR-000224 Java用于基于XML的WebServices2.2Rev 3.6.1):
javax.jws.WebParam
注释(参见7.11.4)可用于指定对应于wsdl:part
参数的wsdl:part
或XML元素声明的name
。如果name
和partName
元素都在javax.jws.WebParam
注释中使用,那么必须将partName
用于wsdl:part
name属性,而注释中的name
元素将被忽略。
因此,你观察到的行为是正确的,根据规范。在文档样式的情况下,两个不同的属性是有意义的,因为在<wsdl:types>
中有元素的部分名称和名称。我想知道在RPC服务中是否可以使用part
的part
属性,如下所示:
<wsdl:part name="myname" element="tns:mynameelement" />
短期测试显示wsimport失败时出错:
无效wsdl:操作"getHelloWorldAsString":它是rpc-文字操作,消息部分必须引用模式类型声明。
WSDL规范并不不允许这样做,但是WS基本轮廓允许:
描述中的wsdl:message可能包含使用元素属性的wsdl:parts,条件是那些wsdl:parts不被rpc-文字绑定中的soapbind:body引用。
结论:如果指定不同的name
和partName
,则没有任何区别。这两个字段之所以存在,是因为相同的注释用于文档绑定样式,其中它们更有意义。
发布于 2014-11-25 13:02:23
名称是消息名称,partName是消息的PartName
<message **name="name"**>
<part **name="partname"** type="xsd:string"></part>
</message>
https://stackoverflow.com/questions/19606687
复制相似问题