簡體   English   中英

使用 smack 4.2.2 從 Openfire 服務器獲取所有用戶

[英]Getting all users from Openfire server using smack 4.2.2

好吧,我正在嘗試使用 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

您無法通過XEP-0055: Jabber Search吸引所有用戶,只能與過濾器一起使用,以確保用戶沒有該過濾器(如特殊字符)。 我知道的唯一方法是使用Rest API Plugin 您可以從鏈接中了解有關此插件的更多信息。 祝好運。

錯誤很明顯。 您沒有至少連接一次(或者斷開連接並且沒有重新連接),或者您的用戶名錯誤。

也許您正在嘗試在沒有本地jid的情況下進行連接。 請檢查以下有關XMPP地址格式的說明:

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

希望你已經解決了這個問題。 我的代碼可以處理這個小小的變化

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

在您的 openfire 中,轉到 Plugins 並選擇 available-plugins > 然后選擇 rest Api > 然后您可以使用以下 url 來獲取組中的所有用戶:

http://localhost:9090/plugins/restapi/v1/users

注意:您可以在以下鏈接中找到所有 Rest EndPoint: https : //www.igniterealtime.org/projects/openfire/plugins/1.2.1/restAPI/readme.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM