HTTPリクエストを介してユーザーのアバターを作成/更新および取得することを主な目的として、OpenFireXMPPサーバー用のVCardプラグインを開発しました。残念ながら、プラグインは期待どおりに機能しません。VCardの変更はデータベース(ofVcard
テーブル)に伝達されますが、userpicが更新されたユーザーもその仲間も更新された画像を見ることができません。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);
しかし、それらは何の効果もないようです。
メソッドがinsetVcard
から呼び出される方法と自分のコードで呼び出される方法の違いが何であるかを理解できません。私は何が欠けていますか?handleIQ(IQ packet)
IQvCardHandler