成功登录XMPP Server后出错。请告诉我。提前谢谢。
错误: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)
答案 0 :(得分:3)
当客户端收到<message/>
属性为type
且非标准值为servertime
的情况时,似乎会发生这种情况:
<message from='sujewan@50.26.201.39/Smack'
to='sujewan@50.26.201.39/Smack'
type='servertime'
timestamp='1439287908'/>
如果应用程序收到没有'type'属性的消息或者应用程序不理解所提供的'type'属性的值,它必须认为该消息是“normal”类型(即“normal”是默认)。
所以这是Smack中的一个错误:它不应该在非标准类型值上崩溃。这应该报告给Smack开发人员。
另一方面,servertime
消息是扩展XMPP的一种不寻常的方式。相同的RFC部分说:
如果包含,'type'属性必须具有以下值之一:
因此,不允许将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网址。)
第三方面,为了传达时间信息,您可能会发现XEP-0202: Entity Time符合您的需求。在版本3.4.1中支持XEP-0202 was added到Smack。