上面有两张Spark客户端的聊天室列表占有者一列不同的原因:当使用以下代码获取时不能获取occupantsCount和subject的值:
System.out.println(roomInfo.getOccupantsCount() + " : " + roomInfo.getSubject());
这是由于Openfire端有个bug(暂且这样说吧,我不知为什么Openfire这样做).首先修改Smack的一个bug,修改RoomInfo类的RoomInfo(DiscoverInfo info) 方法:
Iterator<String> values = form.getField("muc#roominfo_subject").getValues();
if (values.hasNext()) {
this.subject = values.next();
}
else {
this.subject = "";
}
改为:
final FormField subjField = form.getField("muc#roominfo_subject");
this.subject = subjField == null ? "" : subjField.getValues().next();
修改Openfire的源码,org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl类的public DataForm getExtendedInfo(String name, String node, JID senderJID) 方法:
/*final FormField fieldOcc = dataForm.addField(); */
fieldSubj.setVariable("muc#roominfo_occupants");
fieldSubj.setLabel(LocaleUtils.getLocalizedString("muc.extended.info.occupants"));
fieldSubj.addValue(Integer.toString(room.getOccupantsCount()));










