2011-06-05 133 views
19

我用soapui測試了我的web服務(wsdl/soap)。我有錯誤: http/log:錯誤400不良請求。用soapui的WSDL/SOAP測試

請問我的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) 
+0

當您嘗試在瀏覽器中打開它時,您的wsdl的外觀如何? – 2011-06-05 13:31:06

+0

當我打開它int mozilla,它顯示我的XML。 – samir 2011-06-05 13:43:03

+0

你能用xml更新你的問題嗎? – 2011-06-05 13:46:04

回答

31

definitions是WSDL的根元素,所以它看起來像你不加載WSDL。

編輯:

我測試了它,它看起來像整個問題是在你的Web服務器。您的Web服務器將WSDL返回給瀏覽器,但不會將其返回給任何工具,因爲這些工具正在使用非常簡單的HTTP請求,但沒有多個HTTP標頭。丟失標題之一是Accept。一旦這個頭不包含在請求中,你的服務器就會拋出HTTP 400錯誤的請求。

繼續的簡單方法是在瀏覽器中打開WSDL,將wsdl保存到文件中,然後將該文件導入到soapUI中,而不是從URL導入WSDL。

+0

請你能幫助我?這是5天我托盤來解決這個問題。我不明白你的答案,我很抱歉。我如何測試我的wsdl?是日誌錯誤說,我的Web服務不工作?感謝您的回答 – samir 2011-06-05 13:25:33

+0

您是否可以將WSDL添加到soapUI項目中? http://www.soapui.org/Getting-Started/your-first-soapui-project.html – 2011-06-05 13:29:37

+0

不,當我添加它時,它顯示我「從URL加載定義」,它需要幾分鐘,然後它顯示我「com.ev ...:導入wsdl時出錯,是否意味着我的wsdl不工作? – samir 2011-06-05 13:35:15

0

可能的可能性是您的瀏覽器通過代理訪問您的Web服務,並且SoapUI未配置爲使用該代理。例如,我在公司環境中工作,雖然我的IE和FireFox可以訪問外部網站,但我的SoapUI只能訪問內部Web服務。

簡單的解決方案是在瀏覽器中打開WSDL,將其保存爲.xml文件,然後將SoapUI項目作爲基礎。但是,如果您的WSDL依賴於它無法訪問的外部XSD,則這不起作用。

4

另一種可能性是,您需要在SoapUI的服務網址末尾添加?wsdl。 那個人因爲我習慣了WCFClient而不需要它。

+0

這實際上幫助我將它與CXF客戶端結合使用。 – Alfergon 2015-06-09 15:23:39

5

您可以嘗試在Web瀏覽器中打開wsdl並以.wsdl擴展名保存。並將SOAP UI項目中的WSDL設置爲該.wsdl文件。 這真的有效。

3
  • 是,首先要確保你添加 「?WSDL」 你的 「HTTP ...... whatever.svc」 鏈接。
    • 雖然這並沒有解決我的問題。我必須從頭開始創建一個新的WCF項目並手動複製代碼。這解決了它。祝你好運。

而且最重要的是!!!

當您更改代碼中的命名空間時,還請確保在web.config中更改它!

1

我在嘗試測試部署到WSO2 ESB的Web服務時遇到了相同的異常。

WSO2生成了wsdl和wsdl2。我試圖傳遞一個wsdl2的URL,並得到了上述例外。快速谷歌搜索告訴我,wsdl1.1和wsdl2.0之間的區別之一是用'description'替換'definitions'元素。另外,我發現,那SoapUI does not support wsdl2

因此,對我而言,解決方案是使用wsdl1 url而不是wsdl2。