WSDL / SOAP测试使用soapui

时间:2011-06-05 13:15:48

标签: web-services wsdl soapui

我用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)

7 个答案:

答案 0 :(得分:36)

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

编辑:

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

最重要的是!!!

更改代码中的命名空间时,还要确保在web.config中更改它!

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

可能的情况是您的浏览器通过代理到达您的Web服务,并且SoapUI未配置为使用该代理。例如,我在企业环境中工作,而我的IE和FireFox可以访问外部网站,我的SoapUI只能访问内部Web服务。

简单的解决方案是在浏览器中打开WSDL,将其保存到.xml文件,并将SoapUI项目基于该文件。但是,如果您的WSDL依赖于无法访问的外部XSD,那么这将无效。

答案 6 :(得分:0)

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

  1. 消息faultCode=INVALID_WSDL: Expected element '{http://schemas.xmlsoap.org/wsdl/}definitions'表示返回的实际内容不是WSDL名称空间中基本元素为“ definitions”的XML。
  2. 消息WSDLException (at /html)告诉您有关发现发现的重要线索-在此示例中,/html强烈暗示返回了正常的网页,而不是WSDL 。另一个常见的情况是看到类似/soapenv:Reason之类的内容,这表明服务器正在尝试将其视为SOAP调用-例如,如果您的URL用于“基本”服务URL而不是WSDL,则可能会发生这种情况。 。