XMPP 服务器连接错误
Posted
技术标签:
【中文标题】XMPP 服务器连接错误【英文标题】:XMPP Server Connection Error 【发布时间】:2015-08-11 10:28:00 【问题描述】:成功登录 XMPP 服务器后出现错误。请给我建议。提前致谢。
错误:java.lang.IllegalArgumentException:servertime 不是 org.jivesoftware.smack.packet.Message$Type 中的常量
D/SMACK﹕ RECV (0): <message from='sujewan@50.26.201.39/Smack' to='sujewan@50.26.201.39/Smack' type='servertime' timestamp='1439287908'/><presence from='sujewan@50.26.201.39/Smack' to='sujewan@50.26.201.39/Smack' xml:lang='en' id='I0TA4-8'><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.igniterealtime.org/projects/smack' ver='NfJ3flI83zSdUDzCEICtbypursw='/></presence>
W/AbstractXMPPConnection﹕ Connection closed with error
java.lang.IllegalArgumentException: servertime is not a constant in org.jivesoftware.smack.packet.Message$Type
at java.lang.Enum.valueOf(Enum.java:200)
at org.jivesoftware.smack.packet.Message$Type.valueOf(Message.java:607)
at org.jivesoftware.smack.packet.Message$Type.fromString(Message.java:644)
at org.jivesoftware.smack.util.PacketParserUtils.parseMessage(PacketParserUtils.java:229)
at org.jivesoftware.smack.util.PacketParserUtils.parseStanza(PacketParserUtils.java:151)
at org.jivesoftware.smack.AbstractXMPPConnection.parseAndProcessStanza(AbstractXMPPConnection.java:947)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.access$400(XMPPTCPConnection.java:139)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:982)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$200(XMPPTCPConnection.java:937)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:952)
at java.lang.Thread.run(Thread.java:818)
【问题讨论】:
【参考方案1】:当客户端收到带有type
属性且非标准值servertime
的<message/>
节时,似乎会发生这种情况:
<message from='sujewan@50.26.201.39/Smack'
to='sujewan@50.26.201.39/Smack'
type='servertime'
timestamp='1439287908'/>
Section 5.2.2 of RFC 6121 说:
如果应用程序接收到没有“类型”属性的消息,或者应用程序不理解所提供的“类型”属性的值,它必须认为该消息是“正常”类型的(即“正常”是默认)。
所以这是 Smack 中的一个错误:它不应该在非标准类型值上崩溃。这应该报告给 Smack 开发人员。
另一方面,servertime
消息是扩展 XMPP 的一种不同寻常的方式。相同的 RFC 部分说:
如果包含,“类型”属性必须具有以下值之一:
因此,不允许将 type
设置为 servertime
。添加新消息类型的常用方法是嵌入具有特定命名空间的 XML 元素,例如:
<message from='sujewan@50.26.201.39/Smack'
to='sujewan@50.26.201.39/Smack'>
<servertime xmlns='servertime' timestamp='1439287908'/>
</message>
(理想情况下,xmlns='servertime'
放置一个您可以控制的 HTTP URL。)
另一方面,对于传达时间信息,您可能会发现XEP-0202: Entity Time 满足您的需求。在 3.4.1 版本中支持 XEP-0202 was added 到 Smack。
【讨论】:
以上是关于XMPP 服务器连接错误的主要内容,如果未能解决你的问题,请参考以下文章
我正在为 FACEBOOK 创建 XMPP 客户端。 xmpp 连接错误.xmpp.login(apiKey + "|" + sessionKey, sessionSecret,