1

我正在尝试使用 Smack 将带有有效负载的项目发布到 pubsub 节点,但到目前为止我还没有管理。我已经创建了节点并将其配置设置为传递有效负载 (setDeliverPayloads=true)。我正在使用 send 方法发送带有有效负载的项目。

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

然而,该项目在没有有效负载的情况下发布。构造的 IQ 也没有有效负载。正如我从 smack 的调试面板中看到的那样

这就是 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 回答