Discussion:
Client SOAP string contenant XML
(trop ancien pour répondre)
jero
2008-03-18 22:40:12 UTC
Permalink
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
Olivier Miakinen
2008-03-18 23:14:54 UTC
Permalink
Bonjour,
Post by jero
[...]
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
jero
2008-03-20 13:41:19 UTC
Permalink
Post by jero
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-
Post by jero
wsMethode($XMLRequest ,$login,$password);
Continuer la lecture sur narkive:
Loading...