[nusoap] Response not of type text/xml: application/wsdl+xml

Résolu/Fermé
speedred - Modifié par speedred le 7/05/2013 à 14:14
Speedred Messages postés 24 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 19 mars 2014 - 16 mai 2013 à 14:05
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 .
A voir également:

9 réponses

Speedred Messages postés 24 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 19 mars 2014 16
16 mai 2013 à 14:05
Problème résolu, cela venait juste du fait que le pc qui exécutai le code n'avait pas internet ...
1
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2013 à 15:04
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
0
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
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2013 à 15:31
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2013 à 16:16
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
0
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 .
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2013 à 17:08
Ton web service est publique ? Je peux y accéder ?
0
Speedred Messages postés 24 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 19 mars 2014 16
10 mai 2013 à 09: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.
0