我为 OpenFire XMPP 服务器开发了一个 VCard 插件,主要目的是通过 HTTP 请求创建/更新和检索用户的头像。不幸的是,该插件没有按预期工作 - VCard 更改被传播到数据库(ofVcard
表)中,但用户图片更新的用户和他的伙伴都看不到刷新的图像。以下是我创建/更新 VCard 的方法:
...
XMPPServer server = XMPPServer.getInstance();
VCardManager vcardManager = server.getVCardManager();
public void createOrUpdateVcard(String username, String vcard)
throws Exception {
SAXReader reader = new SAXReader();
reader.setValidation(false);
// convert String into InputStream
InputStream is = new ByteArrayInputStream(vcard.getBytes());
// read it with BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(is));
try {
// Reading malformed XML will lead to DocumentException
Document document = reader.read(is);
Element vCardElement = document.getRootElement();
log.info("Username: " + username);
vcardManager.setVCard(username, vCardElement);
} catch (DocumentException e) {
throw new MalformedXmlException(e);
}
}
...
当我直接从客户端更改头像时(我们使用的是 Jitsi),所做的更改不仅会立即存储在数据库中,而且所有好友都会获得刷新的图像。我看到VCardManager
我使用的在内部调度事件:
VCardEventDispatcher.dispatchVCardUpdated(username, newvCard);
但它们似乎没有任何效果。
我无法弄清楚从内部和我自己的代码中调用setVcard
该方法的方式之间有什么区别。我错过了什么?handleIQ(IQ packet)
IQvCardHandler