【问题标题】:WSDL/SOAP Test With soapui使用soapui 进行WSDL/SOAP 测试
【发布时间】:2011-06-05 13:15:47
【问题描述】:

我已经用soapui 测试了我的网络服务(wsdl/soap)。我有错误: http/log : 错误 400 BAD REQUEST。

请问我的 wsdl 有什么错误?

错误/日志:

un Jun 05 14:10:37 CEST 2011:ERROR:javax.wsdl.WSDLException: WSDLException (at /html): faultCode=INVALID_WSDL: Expected element '{http://schemas.xmlsoap.org/wsdl/}definitions'.
   javax.wsdl.WSDLException: WSDLException (at /html): faultCode=INVALID_WSDL: Expected element '{http://schemas.xmlsoap.org/wsdl/}definitions'.
    at com.ibm.wsdl.xml.WSDLReaderImpl.checkElementName(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.eviware.soapui.impl.wsdl.support.wsdl.WsdlInterfaceDefinition.load(WsdlInterfaceDefinition.java:48)
    at com.eviware.soapui.impl.wsdl.support.wsdl.WsdlContext.loadDefinition(WsdlContext.java:66)
    at com.eviware.soapui.impl.wsdl.support.wsdl.WsdlContext.loadDefinition(WsdlContext.java:30)
    at com.eviware.soapui.impl.support.definition.support.AbstractDefinitionContext.cacheDefinition(AbstractDefinitionContext.java:264)
    at com.eviware.soapui.impl.support.definition.support.AbstractDefinitionContext.access$400(AbstractDefinitionContext.java:44)
    at com.eviware.soapui.impl.support.definition.support.AbstractDefinitionContext$Loader.construct(AbstractDefinitionContext.java:230)
    at com.eviware.soapui.support.swing.SwingWorkerDelegator.construct(SwingWorkerDelegator.java:46)
    at com.eviware.soapui.support.swing.SwingWorker$2.run(SwingWorker.java:140)
    at java.lang.Thread.run(Thread.java:637)

【问题讨论】:

  • 当您尝试在浏览器中打开 wsdl 时会是什么样子?
  • 当我在 mozilla 中打开它时,它会显示 xml。
  • 你能用xml更新你的问题吗?
  • 我在 Firefox 中打开它时有这个:与此相关的任何样式信息似乎都不是 XML

标签: web-services wsdl soapui


【解决方案1】:

definitions 是 WSDL 的根元素,所以看起来您没有加载 WSDL。

编辑:

我对其进行了测试,看起来整个问题出在您的网络服务器上。您的 Web 服务器将 WSDL 返回给浏览器,但它不会将其返回给任何工具,因为这些工具使用非常简约的 HTTP 请求,没有很多 HTTP 标头。缺少的标题之一是Accept。一旦此标头未包含在请求中,您的服务器就会抛出 HTTP 400 Bad request。

继续的简单方法是在浏览器中打开 WSDL,将 wsdl 保存到一个文件中,然后将该文件导入到 soapUI 而不是从 URL 导入 WSDL。

【讨论】:

  • 你能帮帮我吗?我用了 5 天的时间来解决这个问题。我没看懂你的回答,对不起。我如何测试我的 wsdl ?日志错误是否表明我的 Web 服务不工作?谢谢你的回答
  • 你能将 WSDL 添加到soapUI 项目吗? soapui.org/Getting-Started/your-first-soapui-project.html
  • 不,当我添加它时,它会显示“从 url 加载定义”,这需要几分钟,它会显示“com.ev ...:导入 wsdl 时出错。是这意味着我的 wsdl 不工作?
  • 是的,这意味着 WSDL 无法下载或不正确。可以在浏览器中打开 WSDL 吗?
  • 我使用 IE/Firefox 来查看 WSDL,并使用 Visual Studio / svcutil(用于创建服务代理的 MS 工具)来模拟soapUI 行为(我家里没有安装soapUI)。我使用 Fiddler 比较了 HTTP 与您的服务器的通信,并测试了不同的 HTTP 请求,直到找到导致问题的差异。
【解决方案2】:

另一种可能性是您需要在 SoapUI 的服务 url 末尾添加 ?wsdl。 那个得到了我,因为我已经习惯了不需要它的 WCFClient。

【讨论】:

  • 这实际上帮助我将它与 CXF 客户端一起使用。
  • 帮助 mi 使用 SOAP UI。
【解决方案3】:

您可以尝试在网络浏览器中打开 wsdl 并使用 .wsdl 扩展名保存。并将 SOAP UI 项目中的 WSDL 设置为此 .wsdl 文件。 这确实有效。

【讨论】:

    【解决方案4】:
    • 是的,首先确保您在“http......whatever.svc”链接中添加了“?wsdl”。
      • 不过,这并没有解决我的问题。我必须从一开始就创建一个新的 WCF 项目并手动复制代码。那解决了它。祝你好运。

    最重要的是!!!

    当您在代码中更改命名空间时,还要确保在 web.config 中进行更改!

    【讨论】:

      【解决方案5】:

      我在尝试测试部署到 WSO2 ESB 的 Web 服务时遇到了同样的异常。

      WSO2 生成了 wsdl 和 wsdl2。我试图传递一个 wsdl2 URL 并得到了上述异常。快速谷歌搜索告诉我,wsdl1.1 和 wsdl2.0 之间的区别之一是用“描述”替换“定义”元素。另外,我发现SoapUI does not support wsdl2

      因此,对我来说,解决方案是使用 wsdl1 url 而不是 wsdl2。

      【讨论】:

        【解决方案6】:

        很可能是您的浏览器通过代理访问您的 Web 服务,而 SoapUI 未配置为使用该代理。例如,我在公司环境中工作,虽然我的 IE 和 FireFox 可以访问外部网站,但我的 SoapUI 只能访问内部 Web 服务。

        简单的解决方案是在浏览器中打开 WSDL,将其保存到 .xml 文件中,并以此为基础构建您的 SoapUI 项目。但是,如果您的 WSDL 依赖于它无法访问的外部 XSD,这将不起作用。

        【讨论】:

          【解决方案7】:

          对于将来遇到此问题的任何人:此处的具体情况(“服务器未正确发回 WSDL”)可能总是相关的,也可能不总是相关的,但两个关键方面应该始终是:

          1. 消息faultCode=INVALID_WSDL: Expected element '{@987654321@}definitions' 表示返回的实际内容不是在 WSDL 命名空间中具有“定义”基本元素的 XML。
          2. WSDLException (at /html) 消息告诉您它确实 找到了什么的重要线索——在本例中,/html 强烈暗示返回的是普通网页,而不是 WSDL。另一种常见情况是看到类似/soapenv:Reason 的内容,这表明服务器正试图将其视为 SOAP 调用——例如,如果您的 URL 用于“基本”服务 URL 而不是 WSDL,则可能会发生这种情况。

          【讨论】:

            【解决方案8】:

            我遇到了同样的问题,解决方案(对我来说)是:

            • 打开 SoapUI 首选项
            • 点击 SSL 设置
            • 清除 KeyStore 和 KeyStore Password 文本框
            • 取消选中客户端身份验证的底部复选框,需要客户端身份验证。

            【讨论】:

              【解决方案9】:

              在 AspNet 服务“结束于”.svc 上,您必须将“?wsdl”放在结束 os URL 上。 否则,SoapUI 将尝试读取服务的登录页面 HTML(这不是 WSDL,对吗?)

              例如: http://localhost:1234/WebServices/WsBlahBlahBlah.svc?wsdl

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-10-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-11-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多