org.apache.xmlrpc.XmlRpcException:错误-118 {error,access_rules_unauthorized}

时间:2018-10-15 11:09:47

标签: ejabberd ejabberd-module ejabberd-api

我正在尝试通过XML-RPC客户端在ejabberd中获得get_roster的响应,但是我正在使用ejabberd 18.9版本,它向我显示此错误:

  

org.apache.xmlrpc.XmlRpcException:错误-118问题   执行命令时发生“ {error,access_rules_unauthorized}”   带参数的get_roster   [{user,<<“ admin” >>},{server,<<“ localhost” >>}]

有人可以建议我该怎么解决吗?

这是我的Java客户端代码:

XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
  config.setServerURL(new URL("http://localhost:4560"));
  XmlRpcClient client = new XmlRpcClient();
  client.setConfig(config);
  Hashtable<String, Object> params = new Hashtable<String, Object>();
  params.put("user", new String("admin"));
  params.put("server", new String("localhost"));
  List<Object> roster_params = new ArrayList<Object>();
  roster_params.add(params);

  Object result = client.execute("get_roster", roster_params);
  System.out.println("Result: " + result); 

2 个答案:

答案 0 :(得分:0)

可能您已经以某种方式配置了ejabberd,您必须提供具有管理员权限的帐户的auth详细信息。在这个用python编写的示例中,请参阅LOGIN结构。抱歉,我不知道该如何用Java完成。

import xmlrpclib

server_url = 'http://127.0.0.1:4560'
server = xmlrpclib.ServerProxy(server_url)

LOGIN = {'user': 'admin', 'server': 'localhost', 'password': 'mypass11', 'admin': True}

def calling(command, data):
    fn = getattr(server, command)
    return fn(LOGIN, data)

print ""
print "Calling with auth details:"
result = calling('get_roster', {'user':'user1', 'server':'localhost'})
print result

答案 1 :(得分:0)

该问题现在已解决,ejabberd.yml文件存在一些问题。 我在配置文件中删除此配置后启用了outh配置,现在此代码有效...

端口:5280     ip:“ ::”     模块:ejabberd_http     request_handlers:       “ / ws”:ejabberd_http_ws       “ / bosh”:mod_bosh       “ / api”:mod_http_api