3

最新の Smackx トランクを使用して、pubsub ノードを取得してサブスクライブしようとしています。ただし、openfire からエラーが返されます: item not found (404)。

私は ColdFusion から Java オブジェクトをインスタンス化しているので、私のコード スニペットはおかしく見えるかもしれませんが、誰かが私が忘れていたことを教えてくれるかもしれません。

ノードの作成方法は次のとおりです。

    ftype = createObject("java", "org.jivesoftware.smackx.pubsub.FormType");
    cform = createObject("java", "org.jivesoftware.smackx.pubsub.ConfigureForm").init(ftype.submit);
    cform.setPersistentItems(true);
    cform.setDeliverPayloads(true);
    caccess = createObject("java", "org.jivesoftware.smackx.pubsub.AccessModel");
    cform.setAccessModel(caccess.open);
    cpublish = createObject("java", "org.jivesoftware.smackx.pubsub.PublishModel");
    cform.setPublishModel(cpublish.open);
    cform.setMaxItems(99);

    manager = createObject("java", "org.jivesoftware.smackx.pubsub.PubSubManager").init(XMPPConnection);

    myNode = manager.createNode("subber", cform);

そして、これが私がそれに到達しようとしている方法です(コードの別のセクションで):

    manager = createObject("java", "org.jivesoftware.smackx.pubsub.PubSubManager").init(XMPPConnection);
    myNode = manager.getNode("subber");

ノードを作成するとすぐに、次のように公開できるようです。

    payload = createObject("java", "org.jivesoftware.smackx.pubsub.SimplePayload").init("book","pubsub:test:book","<book xmlns='pubsub:test:book'><title>Lord of the Rings</title></book>");
    item = createObject("java", "org.jivesoftware.smackx.pubsub.Item").init(payload);
    myNode.publish(item);

ただし、私のコードにエラーを引き起こしているのは getNode() 呼び出しです。

openfire サーバーで使用されている DB をチェックして、ノードが作成されていることを確認しました。そこにそれらがあり、葉ノードなどとして適切に属性付けされているのを見ることができます。

何かアドバイス?XMPP と ColdFusion で何かやっている人はいますか? 私はCFとSmackでメッセージを送受信することに成功しましたが、pubsubはまだ機能していません:)

ありがとう!

4

3 に答える 3

3

これは答えられました:

PubSubManager クラスには、接続とtoパラメータの 2 つの引数を受け取る 2 番目のメソッドがあります。どうやらOpenfireはこれパラメーターに必要とし、いくつかの実験の後、pubsub.your.xmpp.addressを使用して機能することを発見しました

manager = createObject("java", "org.jivesoftware.smackx.pubsub.PubSubManager").init(XMPPConnection,"pubsub.127.0.0.1");
于 2010-05-11T19:58:40.560 に答える