1

Smack を使用して、ペイロードを持つアイテムを pubsub ノードに公開しようとしていますが、これまでのところ管理できませんでした。ノードを作成し、ペイロードを配信するように構成を設定しました (setDeliverPayloads=true)。send メソッドを使用して、ペイロードを含むアイテムを送信しています。

 node.send(new PayloadItem(this.clientNodeName+"*" + System.currentTimeMillis(), new SimplePayload("my book", "books:pubsub:simple", "")));

それにもかかわらず、アイテムはペイロードなしで公開されます。構築された IQ にもペイロードはありません。スマックのデバッグパネルからわかるように

これは smack によって構築され、pubsub サービスに送信されるものです (明らかにペイロードはありません)。

<iq id="1ha20-11" to="pubsub.127.0.0.1" type="set">
   <pubsub xmlns="http://jabber.org/protocol/pubsub">
   <publish node="autoIncrement">
       <item id="autoIncrement*1333380921970"/>
   </publish>
  </pubsub>
</iq>

この問題を解決するための助けをいただければ幸いです。もちろん、ネイティブの IQ メッセージを使用することもできますが、これをできるだけ避けて、smack API で PubSubManager を使用するようにします。

4

1 に答える 1

6

上記のコードは問題ありません。唯一の問題は、上記の例には空のペイロード(SimplePayload( "my book"、 "books:pubsub:simple"、 ""))があるため、smackはアイテムのペイロードをまったく表示しないことです。

ペイロードが指定されると、公開されたアイテムに含まれます。

ペイロードを含むアイテムを公開するためのコードは次のとおりです

  node.send(new PayloadItem(this.clientNodeName+"*" + System.currentTimeMillis(), new SimplePayload(load, "stage:pubsub:simple", "<book xmlns='pubsub:test:book'><title>Lord of the Rings</title></book>")));

これは、Jabberedサーバーに送信される予想されるIQです。

<iq id="OIqU4-12" to="pubsub.stage.127.0.0.1" type="set">
      <pubsub xmlns="http://jabber.org/protocol/pubsub">
        <publish node="autoIncrement">
          <item id="autoIncrement*1333438199718">
            <book xmlns="pubsub:test:book">
              <title>Lord of the Rings</title>
            </book>
          </item>
    </publish>
  </pubsub>
</iq>
于 2012-04-03T07:36:58.367 に答える