Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Joomla和XMLRPC:';传递给方法的参数不正确…';_Joomla_Xml Rpc - Fatal编程技术网

Joomla和XMLRPC:';传递给方法的参数不正确…';

Joomla和XMLRPC:';传递给方法的参数不正确…';,joomla,xml-rpc,Joomla,Xml Rpc,我一直在尝试为Joomla1.5编写一个简单的echo服务,但没有成功。 我的代码是: echo.php: <?php defined( '_JEXEC' ) or die( 'Restricted access' ); jimport('joomla.plugin.plugin'); class plgXMLRPCEcho extends JPlugin{ function plgXMLRPCEcho(&$subject, $config){ pa

我一直在尝试为Joomla1.5编写一个简单的echo服务,但没有成功。 我的代码是:

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.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'>
['echo.echoService'、'system.listMethods'、'system.methodHelp'、'system.methodSignature'、'system.multicall'、'system.getCapabilities']
['string']]
正文:'\n\n\n错误代码\n3\n\n\n错误字符串\n传递给方法的参数不正确:没有与参数数量匹配的方法签名\n\n\n\n'
回溯(最近一次呼叫最后一次):
文件“jav/rpc_client.py”,第11行,在
打印proxy.echo.echoService([['hello']])
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py”,第1199行,在__
返回self.\u发送(self.\u名称,args)
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py”,第1489行,在请求中
verbose=self.\uuu verbose
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py”,请求中的第1253行
返回self.\u解析\u响应(h.getfile(),sock)
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py”,第1392行,在_parse_响应中
返回u.close()
文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py”,第838行,关闭
raise故障(**self.\u堆栈[0])
xmlrpclib.Fault:
谁能告诉我我做错了什么?我是乔姆拉的新手。非常感谢您的帮助。 谢谢
Gloria

rpc的签名是一个变量方法类型数组。每个方法类型的格式为:[返回类型,参数类型…]


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

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

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