使用smack 4.2.2从Openfire服务器获取所有用户

时间:2018-08-16 07:37:08

标签: java xmpp openfire smack

好吧,我正在尝试使用Smack从Openfire服务器中获取所有用户,不幸的是,我不知道如何-我正在使用Smack 4.2.2。

UserSearchManager usm= new UserSearchManager(connection);
DomainBareJid domainJid = 
JidCreate.domainBareFrom(connection.getServiceName());
Form searchForm = usm.getSearchForm(domainJid);
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer("Username", true);
answerForm.setAnswer("search", "*");
ReportedData data = usm.getSearchResults(answerForm, domainJid);
if (data.getRows() != null) {
  for (ReportedData.Row row: data.getRows()) {
     for (String jid:row.getValues("jid")) {
        System.out.println(jid);
     }
  }
}

由于以下原因,此代码无效:

java.lang.IllegalArgumentException: Must have a local (user) JID set. Either you didn't configure one or you where not connected at least once

3 个答案:

答案 0 :(得分:0)

您无法通过XEP-0055: Jabber Search吸引所有用户,只能与过滤器一起使用,以确保用户没有该过滤器(如特殊字符)。我知道的唯一方法是使用Rest API Plugin的openfire。您可以从链接中了解有关此插件的更多信息。祝你好运。

答案 1 :(得分:0)

错误很明显。您可能没有至少连接一次(或者断开连接并没有重新连接),或者您的用户名错误。

也许您正在尝试在没有本地jid的情况下进行连接。请检查以下有关XMPP地址格式的说明:

https://xmpp.org/rfcs/rfc6122.html#addressing-localpart

答案 2 :(得分:0)

希望您已经解决了这个问题。我让我的代码处理了这个小变化

DomainBareJid domainJid = JidCreate.domainBareFrom(“ search。” + connection.getServiceName());