如何使用Java的Smack API发送自定义XML数据包?

Bin*_*oot 10 java xml xmpp smack

我正在使用Java中的Smack API连接到我的XMPP服务器.

我想发送一个这样的自定义消息包:

<message to="you@MyServer.com" type="chat" MYFIELD="custom stuff">
    <body> hi </body>
    <CUSTOM_STANZA A="..." B="..."> 
        C="..." 
        D="..."
    </CUSTOM_STANZA>
</message>
Run Code Online (Sandbox Code Playgroud)

我猜我创建了我自己的Packet,它在它的toXML()方法中返回了这个XML.但这似乎不起作用.

任何帮助,将不胜感激.

Rob*_*bin 7

我不知道你为什么要在邮件中添加自定义属性.这在客户端上会出现问题,并且可能会导致服务器上出现问题,因为它与消息节的架构不匹配.

另一方面,消息内容很容易处理,因为@Femi用数据包扩展说.您需要创建一个扩展PacketExtension的MyExtension,该类中的toXML()将返回您的自定义节.

您可以通过以下方式创建和发送自定义消息:

Message message = new Message();
message.addExtension(new MyExtension());
chat.sendMessage(message);
Run Code Online (Sandbox Code Playgroud)

要阅读该节,您需要注册一个提供程序,该提供程序将创建并返回您的自定义PacketExtension.您应该看看EmbeddedExtensionProvider,因为它为您处理标记解析,从而简化了过程.


sha*_*han 1

您需要定义一个应该实现 ExtensionElement 的自定义类(如 @ Flow提到的)

此答案中提供了产生以下节的非常详细的解释

<message id='923442621149' type='chat'><body>shanraisshan</body>
<reply xmlns='shayan:reply' rText='this is custom attribute'/>
</message>
Run Code Online (Sandbox Code Playgroud)

其中reply是一个自定义扩展,其中包含

  1. 元素(回复)
  2. 命名空间(shayan:reply)

默认 xmpp 命名空间列表可在XMPP 官方网站上找到