2010-03-02 3 views
0

J'ai essayé d'écrire un service d'écho simple pour Joomla 1.5, mais sans succès. Mon code est le suivant:Joomla et XMLRPC: 'Paramètres incorrects passés à la méthode ...'

echo.php:

<?php 

defined('_JEXEC') or die('Restricted access'); 
jimport('joomla.plugin.plugin'); 


class plgXMLRPCEcho extends JPlugin{ 

    function plgXMLRPCEcho(&$subject, $config){ 
     parent::__construct($subject, $config); 
    } 


    function onGetWebServices(){ 
     global $xmlrpcString; 

     $services = array(); 

     // Site search service 
     $services['echo.echoService'] = array(
      'function' => 'plgXMLRPCEchoServices::echoService', 
      'docstring' => 'Returns its parameter.', 
      'signature' => array(array($xmlrpcString)) 
      ); 

     return $services; 
    } 

} 


class plgXMLRPCEchoServices{  
    function echoService($key){ 
     return $key;  
    } 
} 

echo.xml:

<?xml version="1.0" encoding="utf-8"?> 
<install version="1.5" type="plugin" group="xmlrpc"> 
    <name>XML-RPC - Echo API</name> 
    <author>G. N. Mueller</author> 
    <creationDate>February 2010</creationDate> 
    <copyright> 
     Copyright (C) 2010 - 2013 G. Mueller. All rights reserved. 
    </copyright> 
    <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license> 
    <authorEmail>[email protected]</authorEmail> 
    <authorUrl>www.joomla.org</authorUrl> 
    <version>1.0</version> 
    <description>Joomla! XML-RPC Echo API</description> 
    <files> 
     <filename plugin="echo">echo.php</filename> 
    </files> 
     <params> 
     <param name="key" type="string" default="" 
      label="hello" description="echo param" /> 
    </params> 
</install> 

Mon client, client.py:

import xmlrpclib 


url = 'http://www.live-grammar.com/xmlrpc/index.php' 
proxy = xmlrpclib.ServerProxy(url, verbose=True) 
print proxy.system.listMethods() 
print proxy.system.methodSignature('echo.echoService') 
print proxy.echo.echoService([['hello']]) 

Et la sortie est ceci:

['echo.echoService', 'system.listMethods', 'system.methodHelp', 'system.methodSignature', 'system.multicall', 'system.getCapabilities'] 

[['string']] 

body: '<?xml version="1.0"?>\n<methodResponse>\n<fault>\n<value>\n<struct><member><name>faultCode</name>\n<value><int>3</int></value>\n</member>\n<member>\n<name>faultString</name>\n<value><string>Incorrect parameters passed to method: No method signature matches number of parameters</string></value>\n</member>\n</struct>\n</value>\n</fault>\n</methodResponse>' 
Traceback (most recent call last): 
    File "jav/rpc_client.py", line 11, in <module> 
    print proxy.echo.echoService([['hello']]) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line 1199, in __call__ 
    return self.__send(self.__name, args) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line 1489, in __request 
    verbose=self.__verbose 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line 1253, in request 
    return self._parse_response(h.getfile(), sock) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line 1392, in _parse_response 
    return u.close() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line 838, in close 
    raise Fault(**self._stack[0]) 
xmlrpclib.Fault: <Fault 3: 'Incorrect parameters passed to method: No method signature matches number of parameters'> 

Quelqu'un peut-il me dire ce que je fais mal? Je suis nouveau à Joomla. Toute aide est très appréciée. Merci, Gloria

Répondre

1

La signature de votre rpc est un tableau de types de méthodes variant. Chaque type de méthode est de la forme: [type de retour, types d'arguments ...]. Donc, la bonne signature est: array (array ($ xmlrpcString, $ xmlrpcString)). Cela indique que vous avez une méthode non surchargée qui prend une chaîne et renvoie une chaîne.

0

Merci qui a résolu mon problème. J'ai copié le code de l'API Blogger et de l'API Joomla XML RPC fournie avec Joomla, qui ont toutes deux la même erreur dans les signatures. Je ne comprends pas pourquoi ils distribuent du code qui ne fonctionne pas !! C'est énervant.

Questions connexes