Xmpp Openfire发送空的(没有标签属性)jabber:x:延迟扩展到smack

Xmpp Openfire发送空的(没有标签属性)jabber:x:延迟扩展到smack,xmpp,openfire,smack,Xmpp,Openfire,Smack,我从openfire服务器收到脱机消息,但它包含空的jabber:x:delay扩展名 我收到的信息是: <message id="qU7N8-64" to="ac1@server.jj.ru" from="ac2@server.jj.ru/4847791" type="chat"> <body>test message</body> <delay xmlns="urn:xmpp:delay"></delay>

我从openfire服务器收到脱机消息,但它包含空的jabber:x:delay扩展名

我收到的信息是:

<message id="qU7N8-64" to="ac1@server.jj.ru" from="ac2@server.jj.ru/4847791" type="chat">
      <body>test message</body>
      <delay xmlns="urn:xmpp:delay"></delay>
      <x xmlns="jabber:x:delay"></x>
</message>

测试消息
我通过smack库收到此消息

但当我使用Miranda IM连接到openfire时,openfire会发送带有数据的扩展jabber:x:delay


为什么openfire发送空的jabber:x:delay只是为了smack library?

openfire没有做任何不同的事情,因为它不知道(或关心)连接了什么客户端。您正在显示的数据包非常特殊,因为它包含延迟交付的旧版本和当前版本,但在这两个版本中都缺少必需的属性

尝试运行VM参数-Dsmack.debugEnabled=true集。然后检查传入的原始数据包的实际消息内容。最有可能发生的事情有两种

  • 缺少时间,因此Miranda通过填充一些默认值(如当前日期)来进行补偿
  • 时间格式不符合规范,因此Smack中的解析器省略了它
    连接后添加此行

    ProviderManager.getInstance()addExtensionProvider("x","jabber:x:delay", new DelayInformationProvider());
    

    Smack不分析消息中的戳记属性。