URL末尾没有WSDL的SOAP Web服务

May*_*y12 1 soap wsdl web-services

我在Jetty上部署了一个Web服务.我使用SOAP UI通过链接调用它http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import,它的工作原理.我一直在使用在网址末尾有?wsdl的服务,但现在我很困惑.为什么在url的末尾没有?wsdl?

Dav*_*aga 5

Web Service端点通常有一个如下所示的URL:

http://server:port/services/myservice
Run Code Online (Sandbox Code Playgroud)

它没有wsdl参数.这是Web服务本身的URL,即客户端调用的URL.

大多数Web服务框架都有一个方便的功能,它使用wsdlurl参数将端点的url 映射到显示该Web服务的WSDL内容的网页.所以这个网址:

http://server:port/services/myservice?wsdl
Run Code Online (Sandbox Code Playgroud)

就像告诉服务器:"显示此Web服务端点的wsdl文件".您在该网页中看到的内容不是存储在磁盘中的wsdl文件,它只是框架生成的wsdl的内容.

此功能非常有用,因为如果我们要为该Web服务创建客户端,我们不需要去询问wsdl文件,我们可以从该URL获取它.

在SoapUI中

所有这些意味着在SoapUI中你会创建一个新项目并告诉他可以在这里找到wsdl文件:http://server:port/services/myservice?wsdl.如果你告诉他wsdl文件是:http://server:port/services/myservice它将抛出一个错误,因为它不是一个wsdl文件.

或者,您可以输入您在磁盘而不是URL中的wsdl文件的位置,它应该创建相同的ws客户端.

然后SoapUI将读取wsdl,他将看到Web服务的端点是http://server:port/services/myservice这样,这是他将发送请求的地方.

您的网络服务

在您的情况下,由于您已经将url参数传递给端点,因此您可以考虑在此URL处调用您的Web服务:

http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import
Run Code Online (Sandbox Code Playgroud)

如果您想查看该Web服务的wsdl,只需wsdl在URL中添加一个参数即可.请注意,就像任何其他url查询一样,符号?只表示url在那里结束,下一个字符是url参数,它们之间用分隔符&.在您的情况下,您有3个参数(workflow,soapAction和now wsdl):

http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import&wsdl
Run Code Online (Sandbox Code Playgroud)

现在它返回一个像公司类型的文本:blah blah ... Region:blah blah ...

这是wsdl内容,当然包括Web服务中使用的xml类型,都是正常的.

也许它看起来很奇怪,因为在磁盘中的wsdl文件中它没有显示所有这些类型,而是导入xsd包含这些定义的文件.您在浏览器中看到的wsdl永远不会有这样的导入,并且将始终显示嵌入在wsdl文件中的所有类型.

向下滚动所有这些类型定义,您将看到wsdl的其余部分.

我希望它有助于明确?wsdl最终的网址不是网络服务,它只是wsdl内容.