URL末尾没有WSDL的SOAP Web服务

时间:2015-11-13 14:05:48

标签: web-services soap wsdl

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

1 个答案:

答案 0 :(得分:5)

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

http://server:port/services/myservice

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

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

http://server:port/services/myservice?wsdl

就像告诉服务器:“显示此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

如果您想查看该Web服务的wsdl,只需在网址中添加wsdl参数即可。请注意,与任何其他网址查询一样,符号?仅表示网址结束,下一个字符是由&分隔的网址参数。在您的情况下,您有3个参数(workflow,soapAction和now wsdl):

http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import&wsdl
  

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

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

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

向下滚动浏览所有类型定义,您将看到其余的wsdl。

我希望有助于明确最后?wsdl的网址不是网络服务,而只是wsdl内容。