web-services - URL 末尾不带 WSDL 的 SOAP Web 服务

标签 web-services soap wsdl

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

最佳答案

Web 服务端点通常具有如下所示的 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 文件。

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

然后 SoapUI 将读取 wsdl,他将看到 Web 服务的端点是 http://server:port/services/myservice,因此他将在此处发送请求。

您的网络服务

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

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

如果您想查看该 Web 服务的 wsdl,只需向 URL 添加一个 wsdl 参数即可。请注意,就像任何其他 url 查询一样,符号 ? 仅表示 url 在此结束,接下来的字符是由 & 分隔的 url 参数。在您的情况下,您有 3 个参数(工作流程、soapAction 和现在的 wsdl):

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

now it returns a text like Company type: blah blah... Region: blah blah...

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

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

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

我希望它有助于澄清最后带有 ?wsdl 的 url 不是 Web 服务,而只是 wsdl 内容。

关于web-services - URL 末尾不带 WSDL 的 SOAP Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33694567/

相关文章:

web-services - API 消耗 Coldfusion

.net - 将单个数组作为参数的 WCF 操作可以使用 MessageContracts 吗?

c# - 如何从 C# 客户端应用程序执行 ebMS3 AS4 消息传递

java - 为什么 WSDL 解析器仍然导入外部文件?

java - 在对象图中检测到循环,这将导致无限深的 xml

c# - Android 中的 JSON 数组错误

java - 从 JavaScript 调用 JAX-WS Web 服务时的空参数

java - 如何将 ArrayList 添加到 jtable?

C++ 和 SOAP -> 如何开始

python - 使用 SUDS 测试 WSDL