XMPP服务器连接错误

时间:2015-08-11 10:28:01

标签: java android xmpp ejabberd smack

成功登录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)

1 个答案:

答案 0 :(得分:3)

当客户端收到<message/>属性为type且非标准值为servertime的情况时,似乎会发生这种情况:

<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说:

  

如果应用程序收到没有'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。