- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在研究 WSDL 和 JAX-WS,这就是我遇到这个问题的地方。当我在 JAX-WS 中编写服务接口(interface)时,如下所示:
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld {
@WebMethod
@WebResult(name="helloworldstring")
String getHelloWorldAsString(**@WebParam(name="myname")** String name);
}
生成的 WSDL 具有如下声明的请求的消息
:
<message name="getHelloWorldAsString">
<part **name="myname"** type="xsd:string"></part>
</message>
当我从 wsimport
实用程序生成客户端 stub 时,生成的服务类将 name
和 partName
作为“myname”。
如果我在我的服务中根本没有指定 @WebParam
,则 WSDL 的部分名称为 arg0
,而服务 stub 是使用 wsimport
生成的在其 @webParam
声明中获取 name
和 partName
作为 arg0
。
如果我在我的服务类的@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
。此外,使用 wsimport
生成的服务 stub 为 @WebParam
的 name
和 partName
获取 mypartname
> 声明,完全忽略在我的网络服务中声明的 name="myname"
。
所以我不明白@WebParam
这两个属性的意义。如果我在这两个属性中指定不同的值,应该在 WSDL 中反射(reflect)什么。
This link描述如下:
name
:指定参数的名称,因为它出现在生成的 WSDL 文档中。对于 RPC 绑定(bind),这是表示参数的 wsdl:part 的名称。对于文档绑定(bind),这是表示参数的 XML 元素的本地名称。根据 JAX-WS 规范,默认值为 argN,其中 N 替换为从零开始的参数索引(即 arg0、arg1 等)。partName
:为参数指定 wsdl:part 元素的名称属性的值。此属性用于文档样式 SOAP 绑定(bind)。但我仍然没有从中得到太多的理解。我想知道如果我指定不同的 name
和 partName
会有什么不同。
注意:所有这些都是使用 RPC 样式的 SOAP 绑定(bind)而不是文档样式来完成的。
最佳答案
让我们看看规范是怎么说的(JSR-000224 Java API for XML-Based Web Services 2.2 Rev a 3.6.1):
The
javax.jws.WebParam
annotation (see 7.11.4) MAY be used to specify thename
of thewsdl:part
or XML Schema element declaration corresponding to a Java parameter. If both thename
andpartName
elements are used in thejavax.jws.WebParam
annotation then thepartName
MUST be used for thewsdl:part
name attribute and thename
element from the annotation will be ignored.
因此,根据规范,您观察到的行为是正确的。在文档样式的情况下,两个不同的属性是有意义的,因为您在 <wsdl:types>
中同时拥有零件名称和元素名称。 .我想知道是否可以使用 element
part
的属性在 RPC 服务中,像这样:
<wsdl:part name="myname" element="tns:mynameelement" />
简短测试显示 wsimport 失败并出现错误:
Invalid wsdl:operation "getHelloWorldAsString": its a rpc-literal operation, message part must refer to a schema type declaration
WSDL 规范并没有禁止,但是WS-I Basic Profile做:
A wsdl:message in a DESCRIPTION MAY contain wsdl:parts that use the elements attribute provided those wsdl:parts are not referred to by a soapbind:body in an rpc-literal binding.
结论:指定不同的name
没有任何区别和 partName
.这两个字段在那里是因为相同的注释用于文档绑定(bind)样式,它们更有意义。
关于JAX-WS 和 WSDL 中的 javax.jws.WebParam.name 与 javax.jws.WebParam.partName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606687/
我正在研究 WSDL 和 JAX-WS,这就是我遇到这个问题的地方。当我在 JAX-WS 中编写服务接口(interface)时,如下所示: @WebService @SOAPBinding(styl
我使用 JAX-WS RI(默认 Java 实现)建立了一个简单的 Web 服务。 我阅读了很多教程,发现 Web 方法的参数是用 WebParam 注释声明的。例如: @WebMethod void
是否可以将枚举传递为 @WebParam在 SOAP网络服务? @XmlEnum public enum TestEnum { TEST; } @WebService public class
我在 web 服务中有一个方法,具有以下签名: @WebResult(name="purchaseId") public int CreatePurchase( @XmlEle
我有一个像这样定义的 Java JWS WebService: @WebService public class Foo { @WebMethod public int foo(@We
我尝试获取接口(interface)方法中方法参数User user 上注释@WebParam 的名称“best_user”。因为它是一个接口(interface),所以以下代码不允许我访问注释: S
我正在尝试使用 (@XmlElement(required=true) 让我的 @webparam 成为强制性的,但生成的 XSD 仍然显示为 minOccurs="0 "。还尝试设置 nillabl
@WebService public interface MyService { public void doStuff( @WebParam(name = "someObjectList") L
我有一个非常简单的方法,我通过 JAX-WS 注释在 WS API 中使用它: @WebMethod public MyResponse sendSingle2( @WebParam(name
我们正在将 JAX-WS 与 JAXB (2.1) 结合使用。 首先,我们创建了链接到 XSD 类型的 Java 类。 然后,使用 CXF (2.1.3)、Spring (2.0.8) 和 JAX-W
我有一个通过 Jetty 公开 SOAP API 的 Java 应用程序。我可以成功访问 WSDL 并伪造请求,但发送的 webparam 始终为空。我不知道如何调试这个问题。这里我有一些请求中涉及的
我已经使用 wsdl2java 生成了代码,它可以与默认的 Java JAX-WS 实现一起正常工作。当我添加 CXF 时,我的应用程序停止工作。我知道这是因为切换 JAX-WS 实现( Why ws
我一直在努力为这个特定主题寻找解决方案: 可以在@webParam 注释中为基于 SOAP/WSDL 的 Web 服务定义默认值吗?我想要的正是下面的结果: 我的 Web 服务中有一个名为 getCu
我有一个带有 Web 方法的 jax-ws Web 服务: @WebMethod void SetCurrentDate(Date date) 在生成的 wsdl 参数中,日期的类型为 xs:date
我正在使用 JAX-WS 构建 Web 服务。我有一个奇怪的问题,即 @WebParam 的注释 @XmlElement(required=true) 在某些 @WebService 类中工作,但没有
我使用 @WebService、@WebMethod 和 @WebParam 注释从 Java 类生成 WSDL。 WSDL 已生成,并包含 @WebService 和 @WebMethod 的输出,
这是我生成 wsdl 的 java 代码: @WebMethod(action = "sendRequest") @WebResult(partName= "message") public Stri
我正在尝试使用 Java 11 中的 wsimport 工具。 我从 Eclipse EE4J 的 Metro 项目获得了 jax-ws 的开源版本,地址为 https://github.com/ec
我正在尝试使用 JBossWS 3.1.2 开发一个 Web 服务,该服务将 HashMap 作为其参数之一。我正在使用这个版本的 JBossWS,因为它是随我正在使用的 JBoss 版本一起分发的。
我在 wsdl 上使用 wsdl2java 生成了类,服务接口(interface)如下所示 @WebService(targetNamespace = "http://www.sii.example
我是一名优秀的程序员,十分优秀!