好吧,我正在尝试使用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
答案 0 :(得分:0)
您无法通过XEP-0055: Jabber Search
吸引所有用户,只能与过滤器一起使用,以确保用户没有该过滤器(如特殊字符)。我知道的唯一方法是使用Rest API Plugin
的openfire。您可以从链接中了解有关此插件的更多信息。祝你好运。
答案 1 :(得分:0)
错误很明显。您可能没有至少连接一次(或者断开连接并没有重新连接),或者您的用户名错误。
也许您正在尝试在没有本地jid的情况下进行连接。请检查以下有关XMPP地址格式的说明:
答案 2 :(得分:0)
希望您已经解决了这个问题。我让我的代码处理了这个小变化
DomainBareJid domainJid = JidCreate.domainBareFrom(“ search。” + connection.getServiceName());