Kandoの日記: XMPPサーバ・コンポーネント
XMPPでXMPPサーバの機能拡張を行うサーバ・コンポーネントを仕事&趣味の必要から作る必要があって現在お勉強用にJavaでサンプルーコードを作成中。
使うのは:
・サーバ側拡張用のライブラリTinder API
(Openfire専用コンポーネントと標準的な「外部」コンポーネントの両方の兼用コードを作れるAbstractComponentなどが含まれる。)
・Tinderと協調して(外部)サーバ・コンポーネントを作るためのWhack API
の二つ。しかしWhackは長らく1.0.0から更新されておらずTinderの最新1.2.2とは若干不整合がある様子で、コンパイルは通るんだけど実行しようとすると
org.xmpp.component.Log
がないという。確かにWhack1.0.0では使ってるくせにLogなんてインターフェースの定義はない。しかしTinder1.2.2にもない。
「Ignite Realtime: ClassNotFoundExcepti...」を読むと、どうやらWhackが(SVN上にしかない)最新版では自前のLogクラス実装をやめており、さらにTinderはというと1.2.2ではSLF4JのLoggerクラスを使うようになっているからだという。が、しかしSVNから落としてきたWhackは構成からしてエラク大きく変わっていてビルドも容易ではないようだ。
…というわけでできればそのまま配布されているWhack1.0.0のJarファイルを使い、ライブラリのファイルの変更などはしたくない…。
致し方なくSLF4JのLoggerインターフェースをextendするorg.xmpp.component.Logインターフェース(中身は空、つまり単なるエイリアス)をサンプル・コードででっちあげてみたところコンパイルもできて取りあえずは動くようだ…。(ただし実行時に警告メッセージが出ており、おそらくログはまともに取れない。)
と、今度はXmlPullParserがないとか言い出す。…色々とUndocumentedな不整合があるようである。
(…つーかTinderがXML解釈に使うのはdom4jじゃなかったん?クライアント用のSmack APIはXmlPullParser使ってたみたいだけど。)で、XmlPullParserもクラスパスに追加するとようやくクラスみつからないエラーは出なくなった。
…と思ったら今度はConnection refusedでサーバに繋がらぬという。Norton Internet SecurityのFirewall切ったりサーバ名をいじってみたりひとしきり格闘ののち、フトOpenfireサーバの設定をみるとポート番号が5275(デフォルト)である一方、Whackはポート番号5225に決め打ちであった…。これでは繋がらん罠。
TCPやUDPにおけるポート番号の一覧の5200番台とXEP-0114: Jabber Component Protocolを見るとポート番号は定まってはいないらしい。XEP-0114は初期のサーバ実装で使われた一種の「デ・ファクト・スタンダード」という奴で今や"Historical"なのだが、これを置き換える予定の次期規格案XEP-0225: Component Connectionsが"Deferred"(延期)になって正式採用されてないままなのでまだまだ現役なのであった。どうやら近々置き換えられる予定だからということでポート番号とかは確保されていない様子なのであった…。
まぁハードコードされてる番号を変えるわけにもいかないのでサーバ側を設定するとようやく繋がったらしいが、こんどは"XmlPullParserFactory"がないという…。
…イヤ。もうボクお家に帰ゆ。
XMPPサーバ・コンポーネント More | Reply ログイン