2016-05-23 16 views
1

我检查了XML-RPC接口here上的文档。该文件提到了这个方法来添加新用户:无法使用XML-RPC接口创建用户:没有这样的处理程序:Default.setUser

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

eXist-db的文档是错误的。

setUser不是版本2.2支持的功能。有关支持哪些调用的更好列表,请参阅javadoc的RpcApi。您会在那里看到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, {}) 

其实我建议看的RpcConnection的代码,因为API文档说几乎一无所知所需的参数的格式和有关的各种方法的行为,它实现RpcApi。例如,getGroup返回null(在Python中变成None),但请求的组不存在,但getAccount会在帐户不存在时引发异常。为什么?谁知道,但文件确实没有告诉你这一点。

+0

请考虑在https://github.com/exist-db/exist上为eXist-db提交一个问题。 – joewiz

相关问题