问题描述
我一直在尝试为Joomla 1.5编写一个简单的回显服务,但没有成功.我的代码是这样的:
I've been trying to write a simple echo service for Joomla 1.5, but with no success.My code is this:
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:
My 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']])
输出为:
['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的新手.任何帮助深表感谢.谢谢,格洛里亚
Can anyone tell me what I'm doing wrong? I'm new to Joomla. Any help is much appreciated.Thanks,Gloria
推荐答案
rpc的签名是变量方法类型的数组.每种方法类型的形式均为:[返回类型,参数类型...].
The signature of your rpc is an array of variant method types. Each method type is of the form: [return type, arg types...].
因此正确的签名是:array(array(array($ xmlrpcString,$ xmlrpcString)).这表示您有一个非重载的方法,该方法需要一个字符串并返回一个字符串.
So the correct signature is: array(array($xmlrpcString, $xmlrpcString)). This says you have a non-overloaded method which takes a string and returns a string.
这篇关于Joomla和XMLRPC:“错误的参数传递给了方法..."的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!