[nusoap] Response not of type text/xml: application/wsdl+xml [Résolu/Fermé]

Signaler
-
Messages postés
25
Date d'inscription
mercredi 8 mai 2013
Statut
Membre
Dernière intervention
19 mars 2014
-
Bonjour,

je viens vous voir car j'ai un soucis que je n'arrive pas à résoudre même en cherchant partout sur internet. Je dois réaliser un petit programme en PHP qui doit dialoguer avec un web service. J'arrive bien a me connecter a ce web service mais après il y a un truc qui ne va pas, lorsque celui ci doit me renvoyer des informations, j'obtiens le message d'erreur :

Response not of type text/xml: application/wsdl+xml

Je pense comprendre le message mais je ne vois pas comment le résoudre. Ce problème vient il de moi ou du web service. (je tiens a dire que je n'ai aucun moyen de voir le code du coté serveur du web service)

voici mon code :
require_once("../soap/lib/nusoap.php"); 

$wsdl = 'http://192.168.1.1:8080/fichier.wsdl'; 
$client = new soapclient($wsdl); 

$err = $client->getError(); 

if ($err) { 
    // Display the error 
    echo '<h2>Constructor error</h2><pre>' . $err . '</pre>'; 
    // At this point, you know the call that follows will fail 
} 

$result = $client->call('MdBSpieGetInformationPasseport',array('Identifiant' => 'id', 'MotDePasse' => 'mdp')); 

if ($client->fault) { 
    echo '<h2>Fault</h2><pre>'; 
    print_r($result); 
    echo '</pre>'; 
} 
else { 
    // Check for errors 
    $err = $client->getError(); 
    if ($err) { 
        // Display the error 
        echo '<h2>Error</h2><pre>' . $err . '</pre>'; 
        echo $result; 

    } 
     else { 
        // Display the result 
        echo '<h2>Result</h2><pre>'; 
        print_r($result); 
    echo '</pre>'; 
    } 
}


Merci d'avance pour votre aide .

9 réponses

Messages postés
25
Date d'inscription
mercredi 8 mai 2013
Statut
Membre
Dernière intervention
19 mars 2014
16
Problème résolu, cela venait juste du fait que le pc qui exécutai le code n'avait pas internet ...
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
226
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
3 juillet 2014
21
Bonjour,

Ton message d'erreur, tu l'obtiens à quel moment ? Lors du chargement du WSDL ?
Es-tu sur de l'URL du WSDL ? Es-ce que lorsque tu tape l'URL du WSDL dans ton navigateur, tu obtiens le WSDL ?
Essaye d'appeler le Web Service via SoapUI.

Cordialement,
Gigatrappeur
Bonjour,

Tout d'abord merci de ta réponse rapide.

Je suis quasiment sur que l'erreur arrive lors de l'appel à la méthode call() car si je ne mais pas l'appel a cet méthode le message n'apparait pas. Si l'erreur venait du chargement du WSDL j'aurai une erreur après l'appel du constructeur non ?

Pour ce qui est de l'url, j'en suis sur car le fichier se trouve en local, ceux qui gère le web service ne m'ont pas fournie une url qui renvoie le fichier WSDL mais directement le fichier WSDL ainsi qu'un fichier XSD. Lorsqu'il n'arrive pas a trouver le fichier, j'obtiens un autre message d'erreur qui m'indique qu'il n'arrive pas a trouver le fichier demandé (enfin un message similaire ...) De tout manière qu'il soit en local ou en ligne ne changera pas le fonctionnement ?

Cordialement,
Speedred
Messages postés
226
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
3 juillet 2014
21
Hum...
Si le web service a été modifié et que tu n'a pas eu le WSDL correspondant, ça pose problème. Mais a priori, ce n'est pas le problème ici.

Moi, j'aurais fais un appel comme ceci :
$client->MdBSpieGetInformationPasseport('id', 'mdp');

En faite, ça dépend du web service. Il est écrit en Java ? C'est du axis 1 ou 2 ? A moins que ce soit du Javax ?

Vérifie ton niveau de log et passe-le au maximum (si possible).

Ta essayé sur soapUI, parce que l'impression que j'ai est que le web service te retourne autre chose que du xml.

Pour la doc saopclient, rien ne vaut php.net :
https://www.php.net/soapclient

Cordialement,
Gigatrappeur
je te remercie.

Pour ce qui ai du langage de programmation du web service, je n'en ai aucune idée :s . Comment je pourrais savoir avec quel langage il a été écrit ?

Je viens de tester l'écriture que tu me conseillé mais cela ne fonctionne pas, il me dit que ce n'est pas une méthode présente dans le classe soapclient().

Et j'ai aussi testé avec soapUI et lorsque de je rentre des informations, même fausses, il me renvoie bien un fichier xml que soapUI arrive a lire, et j'obtiens bien les massage d'erreur que normalement je devrai recevoir .
Donc grâce a toi je peut en conclure que l'erreur ne viens pas du serveur mais bien de moi ou de nusoap ... ( ce qui veut dire aussi que le fichier est correct.).

ps: je viens de m'apercevoir que le fichier qu'il me revoit c'est le fichier WSDL, c'est vraiment bizarre...

ps2: bon grâce a toi j'y vois un peut plus clair, en comparant soapui et ce que envois, je m'aperçoit qu'il y a des différences.

voici l'en-tete de la requete.
POST /FMBV/soap/wsMdBSpie.wsdl HTTP/1.0
Host: 192.168.1.1:8080
User-Agent: NuSOAP/0.9.5 (1.123)
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 625


Je me rend compte qu'il n'y a pas de "SOAPACTION" et je trouve sa assez bizarre et je ne pense pas que ça soit normal.

Cordialement,
Speedred
Messages postés
226
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
3 juillet 2014
21
En effet...

En faite, si j'étais toi, j'utiliserai pas nusoap. Moi, j'aurai utiliser directement l'objet soapclient.

Essaye ce code, peut-être cela t'aidera mieux comprendre le problème.
$url_wsdl = 'http://.../';
$options = array('soap_version'=>SOAP_1_1, 'exceptions'=>true, 'trace'=>1, 'cache_wsdl'=>WSDL_CACHE_NONE,'connection_timeout' => 25);
$client = new soapclient($url_wsdl, options);
echo '<pre>';
print_r($client ->__getFunctions()); // vérification des méthodes
echo '</pre>';

$function = 'MdBSpieGetInformationPasseport';
$parametres = array('Identifiant' => 'id', 'MotDePasse' => 'mdp');
try
{
     $client->$function($parametres);
}
catch (Exception $fault)
{
    $string =  "<b>Retour en erreur</b> :<br />";
    $string .= "<b>ERROR:</b> ".$fault->faultcode."-".$fault->faultstring.".";
    $string .= "<br /><b>Trace : </b><br />";
    $string .= 'Request : <br/><xmp>';
    $string .= $client->__getLastRequest();
    $string .= '</xmp>';
    $string .= 'Reponse: <br/><xmp>';
    $string .= $client->__getLastResponse();
    $string .= '</xmp>';
    echo $string;
}


Pour ce qui est du langage du WS, faut demander avec le(s) personne(s) qui l'a(ont) écrit.

Peut-être quelqu'un d'autre a une idée pour nusoap ?

Cordialement,
Gigatrappeur
Je te remercie vraiment .

Je pense y voir un peut plus clair, mais malheureusement ce n'ait pas moi qui gère le serveur php et donc je suis obligé d'utilisé nusoap ...

J'ai finalement réussi a mettre le "SOAPAction" mais ça ne change toujours rien .
Messages postés
226
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
3 juillet 2014
21
Ton web service est publique ? Je peux y accéder ?
Messages postés
25
Date d'inscription
mercredi 8 mai 2013
Statut
Membre
Dernière intervention
19 mars 2014
16
désolé de répondre si tardivement.

On ne peut accéder au web-service qu'avec le fichier XSDL donc je te l'envoie par MP.