无法使用XML-RPC接口创建用户:没有此类处理程序:Default.setUser

时间:2016-05-23 11:53:50

标签: xml-rpc exist-db

我检查了XML-RPC接口here上的文档。该文档提到了添加新用户的方法:

boolean setUser(String name, String passwd, String digestPasswd, Vector groups)

使用eulexistdb连接到我的eXist实例,我运行:

import os

from eulexistdb.db import ExistDB

password = os.environ["PASS"]
db = ExistDB("http://localhost:8088/", "admin",
             password, timeout=None, keep_alive=True)
db.server.setUser("foo", "foo", "", [])

但这导致了这个错误:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    db.server.setUser("foo", "foo", "", [])
  File "/usr/lib/python2.7/xmlrpclib.py", line 1243, in __call__
    return self.__send(self.__name, args)
  File "/usr/lib/python2.7/xmlrpclib.py", line 1602, in __request
    verbose=self.__verbose
  File "/home/ldd/Documents/mangalam/btw/software/btw/.btw-venv/local/lib/python2.7/site-packages/eulexistdb/db.py", line 823, in request
    return self.parse_response(resp)
  File "/home/ldd/Documents/mangalam/btw/software/btw/.btw-venv/local/lib/python2.7/site-packages/eulexistdb/db.py", line 832, in parse_response
    return unmarshaller.close()
  File "/usr/lib/python2.7/xmlrpclib.py", line 800, in close
    raise Fault(**self._stack[0])
xmlrpclib.Fault: <Fault 0: 'No such handler: Default.setUser'>

我知道与服务器的连接有效,因为我可以使用createCollection,这也记录在同一页面上。

我正在使用eXist 2.2版。

1 个答案:

答案 0 :(得分:1)

eXist-db的文档错误。

setUser不是2.2版支持的功能。有关支持哪些调用的更好列表,请查看RpcApi的javadoc。您会看到setUser未列出,但查找addAccount,可以创建新用户。所以这段代码有效:

import os

from eulexistdb.db import ExistDB

password = os.environ["PASS"]
db = ExistDB("http://localhost:8088/", "admin",
             password, timeout=None, keep_alive=True)
db.server.addAccount("foo", "foo", "", [], True, 0022, {})

我实际上建议查看实现RpcApi的{​​{3}}代码,因为API文档几乎没有说明所需参数的格式以及各种方法的行为。例如,getGroup在请求的组不存在时返回null(在Python中变为None),但如果该帐户不存在,则getAccount会引发异常。为什么?谁知道,但文档肯定不会告诉你这个。