使用Smack将带有Payload的项目发布到Pubsub节点

Fut*_*020 1 xmpp openfire publish-subscribe smack whack

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

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

然而,该项目没有有效载荷.构造的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>
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助来解决这个问题.当然我仍然可以使用本机IQ消息,但我会尽量避免使用smack API中的PubSubManager.

Fut*_*020 6

上面的代码没有任何问题.唯一的问题是上面提供的示例确实有一个空的有效负载(SimplePayload("我的书","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>")));
Run Code Online (Sandbox Code Playgroud)

这是发送到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>
Run Code Online (Sandbox Code Playgroud)