Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Client SOAP string contenant XML

2 réponses
Avatar
jero
Bonjour,

D'abord je ne suis pas vraiment un PHPiste ; mon cOEur de compétence
est MySQL et tant que possible je fais un maximum de chose par ce
biais là....

Voici mon problème : je dois transmettre des données de ma base via un
webService pour lequel je dispose d'une adresse WSDL.
La méthode prévois que je dois transmettre 3 paramètres dans l'ordre
suivant :
1 (string) le contenu de ma requête au format XML
2 (string) login
3 (string) password

Comme je préfère utiliser MySQL que PHP j'ai écris une fonction MYSQL
qui me retourne directement le document XML formaté comme il se doit.
J'ai testé la récupération de ce string/XML via PHP cela fonctionne
très bien.

En revanche lorsque je lance ma requête SOAP en appelant la méthode
voulue il semblerait que mon XML soit totalement invisible. En effet à
l'affichage de __getLastRequest() n'apparaissent que les valeurs du
login et du password, transmises respectivement en paramètre 1 et 2...

Sachant que la chaine générée par ma fonction MySQL commence par un
entête XML, je me suis dis que le problème venait sans doute d'une
interférence du aux "<?" et "?>" de cet entête. J'ai essayé divers
fonctions d'encodage sur ma chaine XML (htmlentities et autres
htmlspecialchars) mais sans succès.

Je viens donc voir par chez vous si quelqu'un pourrait me tuyauter.

Ci dessous un extrait de mon code afin de vous éclairer d'avantage sur
ma situation. d'avance merci.

// l'appel de la fonction Mysql
$sqlReq= 'SELECT XML_wsMethode_byRef(\''.$clone.'\') as xmlReturn';
$sqlRes = mysql_query($sqlReq)or die("Problem...SELECT
XML_SetCustomReference_byRef");
$result = mysql_fetch_object($sqlRes);
// recuperation de ma chaine XML dans un variable
$XMLRequest = $result->xmlReturn;
// creation de mon client SOAP
$client = new SoapClient("http://...../webService.asmx?
WSDL",array('trace' => 1));
//lancement de la methode avec les 3 parametres string_XML,
string_login, string_password
$client->wsMethode($XMLRequest ,$login,$password);
echo $client->__getLastRequest();


Et ici une transcription de ce que me retourne $client-
>__getLastRequest()

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/
envelope/" xmlns:ns1="http://.../webService">
<SOAP-ENV:Body>
<ns1:wsMethode/>
<param1>string_login</param1>
<param2>string_password</param2>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Encore merci d'avoir pris le temps de lire, j'espère que vous pourrez
m'aider ?
Jérôme

2 réponses

Avatar
Olivier Miakinen
Bonjour,


[...]

Sachant que la chaine générée par ma fonction MySQL commence par un
entête XML, je me suis dis que le problème venait sans doute d'une
interférence du aux "<?" et "?>" de cet entête. J'ai essayé divers
fonctions d'encodage sur ma chaine XML (htmlentities et autres
htmlspecialchars) mais sans succès.


Je ne vois pas bien comment des "<?" et "?>" dans une chaîne de
caractères pourraient poser problème (contrairement aux mêmes
séquences dans un fichier contenant du code PHP mélangé avec du
contenu XML). Mais comme je n'ai pas compris grand chose à ce que
tu fais, je vais partir de l'hypothèse que là est bien l'origine
du problème.

Si oui, alors :
http://fr2.php.net/manual/fr/ini.core.php#ini.short-open-tag

Avatar
jero
On 19 mar, 01:14, Olivier Miakinen <om+ wrote:
Bonjour,


Je ne vois pas bien comment des "<?" et "?>" dans une chaîne de
caractères pourraient poser problème (contrairement aux mêmes
séquences dans un fichier contenant du code PHP mélangé avec du
contenu XML). Mais comme je n'ai pas compris grand chose à ce que
tu fais, je vais partir de l'hypothèse que là est bien l'origine
du problème.

Si oui, alors :http://fr2.php.net/manual/fr/ini.core.php#ini.short-open-tag


D'abord merci d'avoir pris la peine de répondre.
Finalement j'ai trouvé une solution qui fonctionne :
J'ai crée un objet (grande nouveauté pour moi ;)
au quel j'ai ajouté des propriétés nommées comme les paramètres à
passer à la methode WebService et qui ont pour valeur celle que je
veux transmettre, dont mon string au format XML. Puis j'ai mis cet
objet en argument de la requete WebService.

$params = new stdClass;
$params->xmlRequest= $XMLRequest ;
$params->login = $login;
$params->password = $password;
$client->ShowRequestStatus($params); // au lieu de $client-
wsMethode($XMLRequest ,$login,$password);