首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JAX和WSDL中的javax.jws.WebParam.name和javax.jws.WebParam.partName

JAX和WSDL中的javax.jws.WebParam.name和javax.jws.WebParam.partName
EN

Stack Overflow用户
提问于 2013-10-26 04:26:17
回答 2查看 9.1K关注 0票数 5

我在研究WSDL和JAX,这就是我遇到这种情况的地方。当我用JAX编写服务接口时,如下所示:

代码语言:javascript
运行
AI代码解释
复制
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld {
    @WebMethod
    @WebResult(name="helloworldstring")
    String getHelloWorldAsString(**@WebParam(name="myname")** String name);
}

生成的WSDL具有请求的message,声明如下:

代码语言:javascript
运行
AI代码解释
复制
<message name="getHelloWorldAsString">
    <part **name="myname"** type="xsd:string"></part>
</message>

当我从wsimport实用工具生成客户端存根时,生成的服务类将namepartName同时作为"myname“。

如果我在服务中完全不指定@WebParam,则WSDL将部分名称作为arg0,而使用wsimport生成的服务存根在其@webParam声明中同时获得namepartName作为arg0

如果我在服务类中同时在namepartName中指定了@WebParam,如下所示:

代码语言:javascript
运行
AI代码解释
复制
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld {
    @WebMethod
    @WebResult(name="helloworldstring")
    String getHelloWorldAsString(**@WebParam(name="myname", partName="mypartname")**  String name);
}

生成的WSDL以mypartname的形式获取部件名。此外,使用wsimport获取mypartnamenamepartName of @WebParam声明生成的服务存根完全忽略了在webservice中声明的name="myname"

所以我不明白@WebParam这两个性质的意义。如果我在这两个属性中指定了不同的值,那么WSDL中应该反映什么。

这个链接对它们的描述如下:

  • name:指定在生成的WSDL文档中出现的参数的名称。对于RPC绑定,这是wsdl的名称:表示参数的一部分。对于文档绑定,这是表示参数的XML元素的本地名称。根据JAX规范,缺省值是argN,其中N被基于零的参数索引(即arg0、arg1等)所取代。
  • partName:指定参数的wsdl:part元素的name属性的值。此属性用于文档样式SOAP绑定。

但还是没有得到太多的理解。我想知道如果我指定不同的namepartName会有什么不同。

注意:这一切都是用RPC样式、SOAP绑定而不是文档样式来完成的。

EN

回答 2

Stack Overflow用户

发布于 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。如果namepartName元素都在javax.jws.WebParam注释中使用,那么必须将partName用于wsdl:part name属性,而注释中的name元素将被忽略。

因此,你观察到的行为是正确的,根据规范。在文档样式的情况下,两个不同的属性是有意义的,因为在<wsdl:types>中有元素的部分名称和名称。我想知道在RPC服务中是否可以使用partpart属性,如下所示:

代码语言:javascript
运行
AI代码解释
复制
<wsdl:part name="myname" element="tns:mynameelement" />

短期测试显示wsimport失败时出错:

无效wsdl:操作"getHelloWorldAsString":它是rpc-文字操作,消息部分必须引用模式类型声明。

WSDL规范并不不允许这样做,但是WS基本轮廓允许:

描述中的wsdl:message可能包含使用元素属性的wsdl:parts,条件是那些wsdl:parts不被rpc-文字绑定中的soapbind:body引用。

结论:如果指定不同的namepartName,则没有任何区别。这两个字段之所以存在,是因为相同的注释用于文档绑定样式,其中它们更有意义。

票数 3
EN

Stack Overflow用户

发布于 2014-11-25 13:02:23

名称是消息名称,partName是消息的PartName

代码语言:javascript
运行
AI代码解释
复制
   <message **name="name"**>
        <part **name="partname"** type="xsd:string"></part>
    </message>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19606687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文