2010-03-02 54 views
0

我一直在为Joomla 1.5写一个简单的echo服务,但没有成功。 我的代码是这样的:Joomla和XMLRPC:'传递给方法的参数不正确''

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> 

我的客户,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']]) 

,输出为这个:

['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'> 

谁能告诉我我做错了什么?我是Joomla新手。任何帮助深表感谢。 谢谢, Gloria

回答

1

您的rpc的签名是一个变体方法类型的数组。每种方法类型的形式是:[return type,arg types ...]。

所以正确的签名是:array(array($ xmlrpcString,$ xmlrpcString))。这说明你有一个非重载方法,它接受一个字符串并返回一个字符串。

0

谢谢你解决了我的问题。我已经复制了Blogger API中的代码和Joomla附带的XML RPC Joomla API,这两个API在签名中都有相同的错误。 我不明白他们为什么分发不起作用的代码!这真是令人厌烦。