我正在开发基于xmpp(smack + openfire)的聊天系统。当我尝试发送一些常规消息以及一些“额外数据”时,我遇到了问题。当制备该消息本人执行以下操作:XMPP Smack - 正在修改的消息
MyData myObject = new MyData("some text");
Message msg = new Message("[email protected]", Message.Type.chat);
DefaultPacketExtension dpe = new DefaultPacketExtension("packetName", "http://namespace.stuff");
dpe.setValue("dataTag", myObject.toXMLString());
msg.addExtension(dpe);
msg.setBody("Hello World!");
的myObject.toXmlString()返回迈德特对象的XML表示(使用DOM4J)。 在此之后我继续与此消息的发送:
Chat personalChat = chatmanager.createChat(msg.getTo(),new MessageListener() {
@Override
public void processMessage(Chat chat, Message message) {
System.out.println("MESSAGE RECEIVED:");
System.out.println("From: "+message.getFrom());
System.out.println(message);
}
});
personalChat.sendMessage(msg);
调试客户端报告以下消息。
出消息:
<message id="Fx5bQ-4" to="[email protected]" from="[email protected]/Smack" type="chat">
<body>Hello World!</body>
<thread>ef9632e3-6d27-4fea-a5c8-b3f7c85052d8</thread>
<packetName xmlns="http://namespace.stuff">
<dataTag>
<myData xmlns:me="namespace">
<name>some text</name>
<points>0</points>
<res>0</res>
<contract/>
<bonuses/>
<position>0</position>
<secret/>
</myData>
</dataTag>
</packetName>
</message>
在消息:
<message id="Fx5bQ-4" to="[email protected]" from="[email protected]/Smack" type="chat">
<body>Hello World!</body>
<thread>ef9632e3-6d27-4fea-a5c8-b3f7c85052d8</thread>
<packetName xmlns="http://namespace.stuff">
<bonuses/>
<name>some text</name>
<res>0</res>
<contract/>
<position>0</position>
<secret/>
<points>0</points>
</packetName>
</message>
正如你可以看到出现了一些数据的 “损失”。实际上,“dataTag”和“myData”只是作为传出消息的一部分记录下来,但不会出现在传入消息中!这是否意味着(性能的东西......“无用”发送“空”节点)或者是否有openfire设置有问题?
这只是一个小例子......在真实项目中,我在传出消息中有1000多行“myData”对象,而在传入消息中,大多数行都丢失了(比如90%的packetExtension是丢失了,不仅仅是xml的“空”节点)!
你在使用什么服务器?这是您正在使用的实际XML,还是尝试生成示例?例如,你的'xmlns:me'命名空间声明并没有被实际使用。 –