在XMPP中交换自定义XML元素的最佳方法?

时间:2010-11-19 06:29:07

标签: xml xmpp

我有一个XMPP应用程序,其中两个客户端交互(1)用Smack(Scala / Java)编程的机器人和(2)用strophe(Javascript)编程的GUI聊天客户端。

应用需要交换自定义XML(例如,如下所示)

<myPacket>
   <response type='sensorData'>
      <temperature units='Kelvin'>
         234
      </temperature>
   </response>
</myPacket>

交换数据的最佳方式是什么?以下是我能想到的:

1)编写自定义XMPP节

2)将我的XML嵌入到当前定义的节中(例如,在message或iq中)

3)对于smack,use the Message.get(set)Property to read/write custom data

没有。 3)被排除,因为它要求两个客户端都理解Java对象并使用相同的库(Smack)。

请指出解决同一问题的任何其他问题。

[编辑:]经过一些研究,我发现Dataforms(XEP-0004)是最简单的方法,只要你的图书馆支持它。

1 个答案:

答案 0 :(得分:3)

这在很大程度上取决于数据的使用方式。我的经验法则是,如果我只传递键值对(简单数据),那么我会选择Smack中的属性功能。但属性功能只能在Message中使用。出于某种原因,属性扩展不使用Smack的提供程序体系结构,而是将其硬编码到PacketPacketParserUtils类中。因此,如果您无法在IQ或Presence数据包中重复使用它。

如果您打算使用更多的键值对,那么您应该为自定义节编写提供程序。这有点工作但是一旦你实现了编组/解组,那么你的自定义节几乎可以在Smack框架中的任何地方运行。有关详细信息,请参阅Smacks provider architecture

我在我的post之一做了关于写提供者的博客。这不是帖子的主要信任,但希望你也觉得它很有帮助。