SoapuiでWebサービス(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)
definitions
はWSDLのルート要素なので、WSDLをロードしていないようです。
編集:
私はそれをテストしましたが、問題はウェブサーバーにあるようです。 WebサーバーはWSDLをブラウザーに返しますが、多くのHTTPヘッダーのない非常に最小限のHTTP要求を使用しているため、どのツールにも返しません。欠落しているヘッダーの1つはAccept
です。このヘッダーがリクエストに含まれないと、サーバーはHTTP 400 Badリクエストをスローします。
続行する簡単な方法は、ブラウザーでWSDLを開き、wsdlをファイルに保存し、そのファイルをURLからのWSDLではなくsoapUIにインポートすることです。
Webブラウザでwsdlを開き、.wsdl拡張子で保存してみてください。 SOAP UIプロジェクトのWSDLをこの.wsdlファイルに設定します。これは実際に機能します。
別の可能性は、SoapUIのサービスURLの最後に?wsdlを追加する必要があることです。必要のないWCFClientに慣れていたので、その1つを手に入れました。
そして最も重要な!!!
コードで名前空間を変更するときは、web.configでも名前空間を変更してください!
WSO2 ESBにデプロイされたWebサービスをテストしようとしたときに、同じ例外に直面しました。
WSO2はwsdlとwsdl2の両方を生成しました。 wsdl2 URLを渡そうとしましたが、上記の例外が発生しました。クイックグーグルで、wsdl1.1とwsdl2.0の違いの1つが「definitions」要素を「description」に置き換えていることを示しました。また、 SoapUIはwsdl2をサポートしていない であることがわかりました。
したがって、私にとって解決策は、wsdl2ではなくwsdl1urlを使用することでした。
考えられる可能性は、ブラウザがプロキシを介してWebサービスに到達し、SoapUIがそのプロキシを使用するように構成されていないことです。たとえば、私は企業環境で働いており、IEでFireFoxは外部Webサイトにアクセスできますが、SoapUIは内部Webサービスにのみアクセスできます。
簡単な解決策は、ブラウザーでWSDLを開いて.xmlファイルに保存し、その上でSoapUIプロジェクトを作成するだけです。ただし、WSDLが到達できない外部XSDに依存している場合、これは機能しません。