Bonjour,
Tout est dans le titre, je n’arrive pas à intercepter/obtenir la réponse XML effectuée par SoapServer.
Pour le contexte, j’ai implémenté un jeu de WS avec PHP 5.5 et en utilisant SoapServer. J’ai maintenant besoin de positionner des logs complets avec entre autre la requête reçue par le WS ainsi que la réponse faite, le tout au format XML (logs en base que je dois exploiter, ce que me permet le XML).
Pour la requête pas de problème, on sait récupérer les données brutes en dehors de la classe SoapServer :
Pour la réponse en revanche SoapServer comme PHP ne propose aucune méthode pour la récupérer (d’après mes recherches, je serai heureux d’être détrompé ! ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if (! isset ( $GLOBALS ['HTTP_RAW_POST_DATA'] )) { $GLOBALS ['HTTP_RAW_POST_DATA'] = file_get_contents ( 'php://input' ); } $maRequeteXML = $GLOBALS ['HTTP_RAW_POST_DATA'];
Je précise ici que ma réponse est une répétition de la requête enrichie par certaines valeurs (j’applique une norme). Je reprends donc l’objet requête construit pas SoapServer que j’enrichie puis retourne. J’amène cette précisions pour dire que cet objet est beaucoup trop complexe pour que des librairies/classes utilisateurs de types ArrayToXML, ObjectToXML me permettent de reproduire le XML de la réponse SOAP.
J’ai également regardé des solutions de débogage (type http://blog.mayflower.de/179-Extendi...debugging.html) qui permettent d’intercepter la réponse. Ces solutions sont impropres à la production et ne permettent pas le retour du WS.
Je suis assez étonné qu’Apache/PHP ne permettent pas de loguer ce type d’échanges http de façon complète, même les traces Apache ne permettent pas « à priori » de voir les requêtes / réponses complètes des WS lorsque l’on est serveur.
Avez-vous déjà été confronté à cette problématique ? Comment gérez-vous les logs ? Comment faites-vous dans un environnement de production pour avoir la certitude que vos WS sont consommés comme attendu ? Je pense que j’ai dû rater quelque chose mais je ne trouve pas.
Cordialement,
Antoine
Partager