Bonjour à tous ceux qui prennent le temps de lire ce message !
Bon voilà ma situation : je suis en charge de réaliser un client pour un webservice. Le client devra principalement afficher des offres de location. Je précise tout de suite que je n’y connaissais rien en RPC il y a deux semaines de ça et je ne suis pas particulièrement doué en prog donc les choses sont un poil difficiles pour moi.
Je me suis décidé à venir poster ici après pas mal de lectures par ci par là à propos des webservices (j’aime assez me démerder seul et je pars du constat que si je me suis posé la question il y a forcément quelqu’un qui se l’est posé avant moi avec pt être une réponse à la clef….)
Donc j’ai décidé de développer mon client sous php5, de passer par soap comme protocole en mode WSDL, de me servir de la classe soap de php5, de parser mon (mes) flux avec simpleXML.
J’utilise eclipse pour afficher mon wsdl et connaître ce qu’attendent les fonctions en paramètres.
Mon WSDL est assez compliqué avec tout plein d’espaces de nom différents, des trucs que je capte pas encore et bien sûr je n’y ai pas accès (je veux dire par là que je ne peux le modifier….)
Le voilà :
http://cdt29.tourinsoft.com/soft/Rec...ion2.asmx?WSDL
Après pas mal de tests j’arrive à me dépatouiller et à appeler certaines fonctions et à récupérer certains flux.
Je bute sur l’appel de certaines fonctions plus complexes à utiliser en particulier getListingWithSearch qui attend en paramètre (idModule, un Dataset)
Cette méthode sert à afficher des offres en fonction de champs cochés par l’utilisateur (champs eux mêmes récupérés par une fonction distante) Le dataset attendu correspond au dataset renvoyé par la fonction GetFieldsSearch (qui renvoye les champs sur lesquels on peut effectuer un filtrage) on l’on a renseigné le champ VALEUR qui dépend de la recherche à effectuer.
Un peu de code pour illustrer mes propos :
Création de mon client et appel de la fonction getFieldsSearch :
L’appel à la function marche et je récupère bien ce que je veux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $client = new SoapClient('http://cdt29.tourinsoft.com/soft/RechercheDynamique/Syndication/controle/syndication2.asmx?WSDL',array('trace' => 1,'encoding'=>'utf-8' )); $param_getFS = array ('idModule' => '************************'); $res_getFS = $client -> getFieldsSearch($param_getFS); $res_getFS = $client->__getLastResponse(); $res_test = new SimpleXMLElement($res_getFS);
Appel de la fonction getListingWithSearch qui me pose problème :
Ceux qui ont été attentifs remarqueront que je lui passe en paramètre un objet simpleXML alors qu’il attend un dataset correspondant à celui renvoyé par la fonction getFieldsSearch : mon problème se situe là !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $param_getLWS = array ('idModule' => '************************','FieldsSearch' => $res_test ); $res_getLWS = $client -> getListingWithSearch($param_getLWS); $res_getLWS = $client->__getLastResponse();
Pour tester j’ai essayé plusieurs choses, passer l’objet simpleXML en XML avec le fonction asxml() mais elle me renvoie un string et non un dataset donc le serveur soap n’arrive à traiter la requête, simplifier l’objet XML en en gardant que l’arbre à partir du nœud FieldsSearch :
Là le serveur accepte ma requête mais me dit qu’il attend un dataset du type schema, du coup j’ai essayé en ne gardant l’arbre qu’à partir du nœud diffrgam mais l’espace de nom m’empêche d’utiliser la commande xpath(‘//diffgr :diffgram’).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $res_test = $res_test -> xpath('//FieldsSearch');
Je viens vers vous car je suis un peu perdu dans tout ça et j’espère qu’une bonne âme prendra un peu de temps pour m’aiguiller sur la bonne piste (je suis plutôt piste verte que piste noire……) et me remettre dans le droit chemin.
J’espère avoir été assez clair pour vous faciliter la lecture ce post.
J’aimerai connaître le $*¨^ »# qui a osé donner l’acronyme de SOAP (SIMPLE Object Access Protocol)……………..
Partager