我已经用soapui测试了我的Web服务(wsdl / soap)。我有错误:http / log:错误400错误请求。
我的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)
definitions
是WSDL的根元素,因此您似乎没有在加载WSDL。
编辑:
我测试了它,看起来整个问题出在您的Web服务器上。您的Web服务器将WSDL返回到浏览器,但没有将其返回到任何工具,因为这些工具使用的是非常简单的HTTP请求,而没有许多HTTP标头。缺少的标题之一是Accept
。一旦此标头不包含在请求中,您的服务器就会引发HTTP 400错误请求。
继续的简单方法是在浏览器中打开WSDL,将wsdl保存到文件中,然后将该文件而不是URL中的WSDL导入到soapUI。
您可以尝试在Web浏览器中打开wsdl,并以.wsdl扩展名保存。并将SOAP UI项目中的WSDL设置为此.wsdl文件。这确实有效。
[另一种可能性是,您需要在SoapUI的服务URL的末尾添加?wsdl。那是我的习惯,因为我已经习惯了不需要它的WCFClient。
也是最重要的!!
当您在代码中更改名称空间时,还请确保在web.config中更改它!
在尝试测试部署到WSO2 ESB的Web服务时,我遇到了相同的例外。
WSO2生成了wsdl和wsdl2。我尝试传递wsdl2 URL并收到上述异常。快速搜索使我发现,wsdl1.1和wsdl2.0之间的区别之一是用“描述”替换了“定义”元素。另外,我发现SoapUI does not support wsdl2。
因此,对我来说,解决方案是使用wsdl1而不是wsdl2。
[可能是您的浏览器通过代理访问您的Web服务,并且SoapUI未配置为使用该代理。例如,我在公司环境中工作,虽然我的IE和FireFox可以访问外部网站,但我的SoapUI只能访问内部Web服务。
简单的解决方案是仅在浏览器中打开WSDL,将其保存到.xml文件,然后在此基础上构建SoapUI项目。但是,如果您的WSDL依赖于无法访问的外部XSD,则此方法将无效。
对于将来遇到此问题的任何人:此处的特定情况(“服务器未正确发送WSDL”)可能或不一定总是相关的,但两个关键方面应始终是:
faultCode=INVALID_WSDL: Expected element '{http://schemas.xmlsoap.org/wsdl/}definitions'
表示返回的实际内容不是WSDL名称空间中基本元素为“ definitions”的XML。WSDLException (at /html)
强烈暗示返回的是正常网页,而不是WSDL。另一个常见的情况是看到类似/html
的内容,这表明服务器正在尝试将其视为SOAP调用-例如,如果您的URL用于“基本”服务URL而不是WSDL,则可能会发生这种情况。 >