- 1
[Opened] [résolu] SoapFault exception: Client DTD are not supported by SOAP
Posted by willy on 04/01/2011 15:24
Bonjour
J'utilise Jelix 1.2 version stable.
J'ai une erreur lorsque j'essaie de tester mon client SOAP. j'ai suivi la documentation. Je parviens à consulter la liste des méthodes de mon webservice dont l'unique est la méthode hello. En cliquant sur le lien WSDL, j'ai le XML généré. Mais lorsque j'exécute le client SOAP qui se trouve dans mon controleur client.classic.php, j'ai l'erreur : SoapFault exception: Client DTD are not supported by SOAP in ...
Juste après la ligne qui appelle la méthode soapCall, j'ai ajouté la ligne qui appelle la méthode getLastResponse() de l'ojet SoapClient afin d'avoir le contenu de la dernière réponse SOAP. J'ai donc constaté que la fonction __getLastResponse() me renvoie la page d'accueil de mon projet jelix (la page que j'ai obtenue lorsque j'ai testé la création de mon prjoet jelix).
SVP, Avez-vous une idée de ce qu'il faut faire pour que mon web service s'exécute correctement ? Je ne sais plus quoi faire.
[Opened] SoapFault exception: Client DTD are not supported by SOAP
Posted by laurentj on 04/01/2011 15:45
Salut,
tu veux dire que ton appli fait à la fois serveur et client SOAP ?
À part ça, je vois deux origines possibles
- l'url que tu donnes à ton SoapClient n'est pas bonne
- ou, si ton appli fait aussi serveur (fourni le service web), ton point d'entrée pour soap n'est pas défini ou mal défini (ça ne peut pas être index.php, il faut un point d'entrée spécifique avec un contenu spécifique).
[Opened] Re: SoapFault exception: Client DTD are not supported by SOAP
Posted by willy on 04/01/2011 16:07
Merci pour ta prompte réponse !
Mon application fait effectivement à la fois client et serveur SOAP.
A cet effet, j'ai créé deux contrôleurs : server.soap.php qui contient uniquement la méthode hello tel que vu dans la documentation. le second contrôleur est le client et se nomme client.classic.php avec la méthode index qui contient également le modèle donné dans la documentation.
Voici le code de mon client :
function index() { <code> ini_set("soap.wsdl_cache_enabled", 0); // Chargement du WSDL try { $wsdlURI = "http://localhost/index.php/jWSDL/WSDL/wsdl?service=ulog~server"; $client = new SoapClient($wsdlURI, array("trace"=>1, "exceptions"=> 0)); } catch (SoapFault $fault) { throw new Exception($fault->getMessage()); } try { $result = $client->__soapCall("hello", array()); die("La reponse : " .$result); } catch (SoapFault $fault) { print_r($fault); throw new Exception($fault->getMessage()); }
}
</code>L'url donnée au client me renvoie bien le fichier XML lorsque je l'exécute dans mon navigateur. Et si je fait print_r($client->__getFunctions()) juste après new SoapClient, alors j'obtiens bien un tableau contenant ma méthode hello. C'est au niveau de soapCall qu'il ya problème, la méthode hello semble ne pas s'exécuter. et l'erreur est SoapFault exception: Client DTD are not supported by SOAP.
Pour le point d'entrée SOAP, j'ai effectivement créé un point d'entrée et je l'ai fait en utilsant la commande jelix createentrypoint pour être sûr que je ne ferai pas d'erreur. le point d'entrée s'est bien créé www/soap.php et son contenu est bien spécifique. Dans le répertoire var, j'ai aussi vu var/config/soap/config.ini.php. Dans le fichier projet.xml, dans la section entrypoint, le entryfile de soap y figure.
Est-ce qu'il y a quelque je fais mal SVP ou alors que j'ai oublié ?
[Opened] Re: SoapFault exception: Client DTD are not supported by SOAP
Posted by willy on 04/04/2011 11:38
Bonjour,
j'ai téléchargé l'application test dans la section téléchargement. j'ai testé la section soap qui fonctionne sans souci.
je m'en suis inspirée pour réussir le test SOAP dans mon application test Jelix.
Ma configuration dans le fichier var/defaultconfig.ini.php était pour ce qui est du moteur d'url basic_significant. Dans ce cas, d'après la documentation, il faut déclarer dans la balise entrypoint (dans le fichier projetct.xml je suppose). Mais cela ne fonctionnait pas chez moi. J'ai regardé la configuration dans l'application test de jelix. Dans la section urlengine, j'ai engine = simple. Et dans la section simple_urlengine_entrypoints, on a soap = "@soap". j'ai donc modifié ma configuration en changeant le mode engine en simple et en ajoutant également la ligne soap="@soap".
J'ai aussi ajouté un lien sur ma page d'acceuil qui appelle mon soapclient. Je n'ai pas directement saisi l'url du soap client dans le navigateur.
C'est en faisant cela que le test de mon service web a fonctionné.
J'aimerai comprendre pourquoi je ne parvenais pas à faire le test avec engine = basic_significant. Y-a-il une configuration supplémentaire qu'il fallait faire ? Avez-vous des orientations sur ce qu'il fallait faire pour que mon test d'origine fonctionne ?
Merci
[Opened] SoapFault exception: Client DTD are not supported by SOAP
Posted by laurentj on 04/05/2011 10:21
Est ce qu'il y avait le même "engine" pour tout les points d'entrées ? as tu vérifié que dans le wsdl, les urls qui y étaient, étaient bonnes ?
[Opened] [résolu] SoapFault exception: Client DTD are not supported by SOAP
Posted by willy on 04/05/2011 10:55
Bonjour,
J'ai refais le test du web service avec engine = basic_significant. Le test a été concluant.
Je me suis rassurée d'avoir soap = on dans ce cas là dans le fichier defaultconfig.ini.php. Dans ce même fichier, j'ai enlevé le module par défaut et l'action par défaut, ainsi que la section response. Dans index/config.ini.php, j'ai mis le module et l'action par défaut, ainsi que la section response avec html=myHtmlResponse. Dans soap/config.ini.php, j'ai mis le module et l'action par défaut (la méthode de mon webservice). Et je n'ai rien mis dans la section response. Je pense que c'est cette section response qui me faisait obtenir dans __getLastResponse la page d'accueil de mon projet.
Merçi pour toutes vos contributions.
- 1