1

我到处搜索,但找不到答案:当我尝试使用无效的登录用户名/密码登录任何 XMPP 服务器(我的 Openfire 设置、talk.google.com、jabber.org)时,抛出 XMPPException(消息:SASL 身份验证 PLAIN 失败:未授权)不包含任何 XMPPError 或 StreamError(均为空)。

最奇怪的是,使用与我相同的 Smack 版本 - v3.2.2 的 Spark Java XMPP 客户端(我什至用 Spark 交换了我的)可以使用 getXMPPError 处理无效的登录凭据,它返回实际的 XMPP错误对象,不为空!这怎么可能呢?

我浏览了 Spark 源代码,但我什么也想不通。我尝试了无数的变化——各种 ConnectionConfiguration 设置,连接到其他 Jabber/XMPP 服务器,没有任何帮助。我什至用 Wireshark 嗅探了服务器响应,它们对于 Spark 和我的应用程序是相同的。

我最终解析了该死的返回字符串“SASL authentication PLAIN failed: not-authorized”......

有人可以在这里阐明一下吗?

4

2 回答 2

0

来自Ignite Realtime 上的Javadoc :

getXMPPError() 返回与此异常相关的 XMPPError,如果不存在则返回 null。

我不确定,但也许 spark 实际上会像您一样解析错误字符串?

于 2013-07-24T03:25:50.800 回答
0

不知道这是否有帮助,但尝试类似

try {
    XMPPConnection connection = new XMPPCOnnection....
    connection.connect();
    .
    .
    .
} catch (Throwable t) {
      t.printStackTrace();
}

原因是您可能正在寻找错误的异常,通过捕获 Throwable 您将寻找几乎所有内容,因此此代码不会解决您的问题,但可能会让您走上正轨,或者至少为您提供一些提示。

于 2012-08-22T23:43:11.777 回答