我在Jetty上部署了一个Web服务。我使用SOAP UI通过http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import
之类的链接调用它,它可以工作。
我一直在使用在网址末尾有?wsdl的服务,但现在我很困惑。
为什么在url的末尾没有?wsdl?
答案 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中你会创建一个新项目并告诉他可以在这里找到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内容。