【问题标题】:SOAP web service without WSDL at the end of URLURL 末尾没有 WSDL 的 SOAP Web 服务
【发布时间】:2016-06-22 19:09:18
【问题描述】:

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

【问题讨论】:

  • 对于 Web 服务来说,url 看起来很奇怪。将wsdl 参数添加到端点url 告诉底层soap 实现生成部署的wsdl 的内容。通常在ws url中只有一个参数,这就是我们添加?wsdl的原因。例如,SoapUI 需要一个返回 wsdl 内容的 url(即 url+?wsdl)或存储在磁盘中的 wsdl 文件。您必须提供更多信息:
  • - 您使用哪个库来创建 ws? - 如果您在浏览器中转到http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import,您会看到什么? - 如果你去http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import?wsdl?
  • 大卫,感谢您的回复。我没有创建这个 ws。在浏览器 wia 链接中,我看到:HTTP ERROR: 400 Problem accessing /DefaultRequestListener. Reason: Error executing the request Powered by Jetty:// 如果我添加 ?wsdl,我看到:1 Processflow error occured. Please check programm Logs!
  • 我在写url的时候在最后一个问题中犯了一个错误。我想检查您是否可以在浏览器中看到 wsdl。我的意思是转到:http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import&wsdl 请注意,我将最后一个 ? 更改为 &
  • 我也在 SOAP UI 响应中看到:Content-Type: text/html。但如果是肥皂,我应该看到`text/xml`。对吗?

标签: web-services soap wsdl


【解决方案1】:

Web 服务端点通常具有如下所示的 url:

http://server:port/services/myservice

它没有wsdl 参数。这是 Web 服务本身的 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 参数传递给端点,您可以考虑将在此 url 调用您的 web 服务:

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

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

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

现在它返回一个文本,如 Company type: blah blah... Region: blah blah...

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

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

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

我希望它有助于明确以 ?wsdl 结尾的 url 不是 Web 服务,它只是 wsdl 内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多