web-dev-qa-db-fra.com

Test WSDL/SOAP avec soapui

J'ai testé mes services Web (wsdl/soap) avec soapui. et j'ai les erreurs: http/log: error 400 BAD REQUEST.

Quelle peut être l'erreur s'il vous plaît avec mon WSDL?

erreur/journal:

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)
20
samir

definitions est un élément racine de WSDL. Il semble donc que vous ne chargez pas WSDL.

Modifier:

Je l'ai testé et il semble que tout le problème concerne votre serveur Web. Votre serveur Web renvoie WSDL au navigateur, mais ne le renvoie à aucun outil, car ces outils utilisent des requêtes HTTP très minimalistes sans nombreux en-têtes HTTP. Un des en-têtes manquants est Accept. Une fois que cet en-tête n'est pas inclus dans la demande, votre serveur envoie la requête HTTP 400 incorrecte.

L'approche facile à poursuivre consiste à ouvrir WSDL dans le navigateur, à enregistrer le fichier wsdl dans un fichier et à importer ce fichier dans soapUI au lieu du fichier WSDL à partir d'une URL.

35
Ladislav Mrnka

Vous pouvez essayer d’ouvrir le wsdl dans un navigateur Web et d’enregistrer avec l’extension .wsdl. Et définissez le WSDL dans le projet d'interface utilisateur SOAP sur ce fichier .wsdl . Cela fonctionne vraiment.

5
Juno123

Une autre possibilité est que vous deviez ajouter? Wsdl à la fin de votre URL de service pour SoapUI . Celle-ci m’a eu comme je suis habituée à WCFClient qui n’en avait pas besoin.

4
Mike
  • Oui, d’abord, assurez-vous d’ajouter "? wsdl" à votre lien "http ...... what.svc" .
    • Cela n'a pas résolu mon problème, cependant. Je devais créer un nouveau projet WCF depuis le début et copier le code manuellement. Cela l'a corrigé. Bonne chance.

Et le plus important !!!

Lorsque vous modifiez un espace de noms dans votre code, assurez-vous également de le modifier dans web.config!

3
Cătălin Rădoi

J'ai rencontré la même exception en essayant de tester mes services Web déployés sur WSO2 ESB. 

WSO2 a généré wsdl et wsdl2. J'ai essayé de passer une URL wsdl2 et j'ai obtenu l'exception ci-dessus. La recherche rapide sur Google m'a montré que l'une des différences entre wsdl1.1 et wsdl2.0 consiste à remplacer l'élément 'définitions' par le libellé 'description'. En outre, j'ai découvert que SoapUI ne prend pas en charge wsdl2 .

Par conséquent, pour moi, la solution consistait à utiliser wsdl1 url au lieu de wsdl2. 

1
arghtype

Il est probable que votre navigateur accède à votre service Web via un proxy et que SoapUI n'est pas configuré pour utiliser ce proxy. Par exemple, je travaille dans un environnement d'entreprise et bien que mon IE et FireFox puissent accéder à des sites Web externes, mon SoapUI ne peut accéder qu'aux services Web internes. 

La solution facile consiste simplement à ouvrir le WSDL dans un navigateur, à l’enregistrer dans un fichier .xml et à baser votre projet SoapUI sur celui-ci. Cela ne fonctionnera pas si votre WSDL repose sur des XSD externes auxquels il ne peut pas accéder, cependant.

0
Chris Thornton