Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je suis nouveau sur ce forum (et sur Zend) et j'ai une question à propos de Zend_XmlRpc, j'espère que quelqu'un sera capable de m'aider.
Voilà j'ai déjà un projet existant en php avec de l'XML-RPC utilisant CURL et puisque je passe sous Zend, j'aimerai utiliser le Zend_XmlRpc.
Problème !
Déjà lors de l'encodage en XML pour l'envoi de la requête je n'obtiens pas le même résultat entre Zend_XmlRpc et xmlrpc_encode_request !
L'appel :
$params = array( 'username' => 'admin', 'password' => 'monpassword', 'myusername' => 'admin', 'service' => 'Sandbox.Method' ); $client->call('fetch', $params);
Avec Zend_XmlRpc j'obtiens :
<?xml version="1.0" encoding="UTF-8"?> <methodCall> <methodName>fetch</methodName> <params> <param><value><string>admin</string></value></param> <param><value><string>monpassword</string></value></param> <param><value><string>admin</string></value></param> <param><value><string>Sandbox.Method</string></value></param> </params </methodCall>
On dirait qu'il n'est pas capable de gérer les tableaux...
Alors qu'avec xmlrpc_encode_request ça marche correctement :
<?xml version="1.0" encoding="iso-8859-1"?> <methodCall> <methodName>fetch</methodName> <params> <param><value><struct> <member><name>username</name> <value> <string>admin</string></value></member> <member><name>password</name> <value> <string>monpassword</string> </value> </member> <member><name>myusername</name> <value> <string>admin</string> </value> </member> <member><name>service</name> <value> <string>Sandbox.Method</string> </value> </member> </struct></value></param> </params> </methodCall>
Ensuite j'ai un soucis lors de la réception, je reçois bien le xml de mon serveur xml-rpc me disant que la requête est invalide (puisque Zend_XmlRpc l'a mal encodé..) MAIS lors du parsing du xml à la réception, je reçois une exception Zend_XmlRpc_Fault avec un error code de 1, plus exactement il plante à cet endroit :
Zend/XmlRpc/Response.php - Ligne ~177
try { $xml = @new SimpleXMLElement($response); } catch (Exception $e) { // Not valid XML $this->_fault = new Zend_XmlRpc_Fault(651); $this->_fault->setEncoding($this->getEncoding()); return false; } if (!empty($xml->fault)) { // !!! FAULT N'EST PAS VIDE !!! // fault response $this->_fault = new Zend_XmlRpc_Fault(); $this->_fault->setEncoding($this->getEncoding()); $this->_fault->loadXml($response); return false; }
Alors que si je fais un xmlrpc_decode de $response, j'obtiens bien le bon retour ... à savoir :
array( faultCode => 42, faulString => 'error...' );
Si quelqu'un pourrait m'aider car je ne sais pas où chercher, j'aimerai éviter de modifier autant de code directement dans Zend...
Dernière modification par menou (01-03-2008 12:04:34)
Hors ligne
Bon après une tentative de patch homemade j'ai finalement trouvé la solution ...
En fait bien que xmlrpc_encode_request l'accepte, pour Zend_XmlRpc_Client il faut lui passer :
$params = array('value' => array( 'username' => 'admin', 'password' => 'monpassword', 'myusername' => 'admin', 'service' => 'Sandbox.Method' ));
C'est peut-être bête mais il fallait le savoir ...
Ah et le truc sympa c'est qu'en fait il interprete l'erreur que me renvoit le serveur sous forme d'exception, donc ça c'est cool aussi.
Donc finalement rien à redire
Hors ligne