【エラー解決方法】XMPP通信で相手からのメッセージを受け取れない!? を解決する方法

こんにちは。ぐっさんです。

XMPP通信を行うモジュールを開発し、動作確認をしていたところ、なぜか相手からのメッセージを受け付けられない事象が発生しました。
キューの内容を確認したところ、キューにメッセージが入ってすぐ、下記のエラーが返されていました。

<iq id="334" to="user1@192.168.1.1/client" from="user2@192.168.1.2/resource" type="error">
  <error code="501" type="CANCEL">
    <feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
  </error>
</iq>

メッセージを見ると501のエラーコードがでて、キャンセルされているようです。
ただ、受け取ろうとした側では、エラーが何もでず、何をしたらいいのか全くわかりません…………。

エラー発生時の環境

エラー発生時の環境は以下になります。

言語
Java1.8.0_91
サーバー
Openfire 3.8.1

エラーの原因

何度もプログラムを確認し、いくら探してもプログラムの要因が見つかりませんでした。
結果的には、XMPP通信のクライアントライブラリとして使用していた、smackが使用する設定ファイルが無かったことが原因でした。

エラー解決方法

META-INFの下にsmack.providersを設定し、Providerクラスを下記のように指定することで解消しました。

<?xml version="1.0"?>
<smackProviders>
   <extensionProvider>
       <elementName>x</elementName>
       <namespace>jabber:iq:event</namespace>
       <className>org.jivesoftware.smack.packet.MessageEvent</className>
   </extensionProvider>
</smackProviders>

まとめ

ファイルが見つからない等のエラーが、発生してくれれば分かりやすかったのですが…………。
何も出ないと原因究明に時間がかかってしまいますね。

それでは、よいXMPPライフを!

記事をシェア
MOST VIEWED ARTICLES