Login Smack:XMPPException.getXMPPError()和XMPPException.getStreamError()的登录用户名/密码错误,返回Null

Login Smack:XMPPException.getXMPPError()和XMPPException.getStreamError()的登录用户名/密码错误,返回Null,login,xmpp,smack,sasl,Login,Xmpp,Smack,Sasl,我到处都搜索过,但找不到答案:当我尝试使用无效的登录用户名/密码登录任何XMPP服务器(我的Openfire设置,talk.google.com,jabber.org)时,抛出的XMPPException(消息:SASL身份验证失败:未授权)不包含任何XMPPError或StreamError(两者均为空) 最奇怪的是,Spark Java XMPP客户端使用与我相同的Smack版本(v3.2.2)(我甚至将我的版本与Spark版本进行了交换)可以使用getXMPPError处理无效的登录凭据,

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

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

我查了一下火花源,什么也查不出来。我尝试了无数的变化——各种各样的连接配置设置,连接到其他Jabber/XMPP服务器,但毫无帮助。我甚至用Wireshark嗅探服务器的响应,它们对于Spark和我的应用程序都是一样的

我最终解析了该死的返回字符串“SASL身份验证失败:未授权”


有人能在这里解释一下吗?

我不知道这是否有帮助,但试试类似的方法

try {
    XMPPConnection connection = new XMPPCOnnection....
    connection.connect();
    .
    .
    .
} catch (Throwable t) {
      t.printStackTrace();
}
原因可能是您正在寻找错误的异常,通过捕获Throwable,您将寻找几乎所有的东西,因此此代码不会解决您的问题,但可能会让您走上正轨,或者至少为您提供一些提示。

来自on Ignite Realtime:

getXMPPError() 返回与此异常关联的XMPPError,如果没有异常,则返回null

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