Smack 库的受保护类中生成的异常
Posted
技术标签:
【中文标题】Smack 库的受保护类中生成的异常【英文标题】:Exceptions generated inside protected classes of Smack library 【发布时间】:2016-07-29 08:07:58 【问题描述】:我正在尝试通过 Smack 与 Firebase Cloud Messaging CCS 建立连接。 我在使用以下受保护的 Smack 接口时遇到问题。我不知道为什么要调用这些接口?
请参阅下面我如何建立我的配置生成器对象和我的连接:
configBuilder = XMPPTCPConnectionConfiguration.builder();
configBuilder.setServiceName("192.168.1.74").setHost("fcm- xmpp.googleapis.com").setUsernameAndPassword(s1, s2) .setPort(5236).setSendPresence(false).setCompressionEnabled(false).setCustomSSLContext(contexty)
other_connection = new XMPPTCPConnection(configBuilder.build());
//other_connection object is an AbstractXMPPConnection object
android/smack 代码尝试连接但失败。以下是例外情况:请注意,我的 SSLcontext 对象已使用 keymanagerfactory 初始化,其中包含一个密钥库,该密钥库持有由证书颁发机构验证的有效证书。
例外:
**** Verification of void org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketWriter.<init>(org.jivesoftware.smack.tcp.XMPPTCPConnection) took 135.634ms*
07-29 03:30:14.211 3346-3408/rarigames.answerme V/RenderScript: 0xa172ca00 Launching thread(s), CPUs 2
07-29 03:30:39.281 3346-3548/rarigames.answerme D/ricky: Unable to connect or login to FCM CCS. org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 25000ms (~25s). Used filter: No filter used or filter was 'null'.
07-29 03:30:39.284 3346-3557/rarigames.answerme W/AbstractXMPPConnection: Connection closed with error
org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT ��F@1:8 in java.io.BufferedReader@2c985591)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:432)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:313)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1169)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:948)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:963)
at java.lang.Thread.run(Thread.java:818)
如您所见,出现问题的 Smack 类是: 受保护的类 XMPPTCPConnection.PacketReader 和 受保护的类 XMPPTCPConnection.PacketWriter 试图读取的异常中提到的 Bufferedreader 是什么?来自 FCM CCS 的 XML 回复?我应该在尝试连接之前验证此连接吗?这就是这里发生的事情,当我尝试连接而不验证连接对象正在尝试验证自己并且 XML 数据包被发送到 Smack 库的这些受保护类时?如果这些 XML 文档确实是由 FCM CCS 发送的,我如何才能获得这些可能出于身份验证目的而发送的 XML 文档?
感谢您的任何建议或建议
【问题讨论】:
您能否说明您尝试从何处连接到 CCS。您似乎正在尝试从 Android 客户端连接到 CCS,这不是设计的方式。 我已经能够连接到 FCM CCS。原来我错过了 SSLsocket。所以我所做的就是使用我的 SSLcontext 创建一个 SSLsocket。现在错误消失了,我连接到 FCM CCS。但现在我收到以下错误:X-OAUTH2 上的编码不正确。似乎连接正在尝试使用 Smack 库来使用 SASLAuthentication。我正在尝试注销 SASLMechanisms 并强制连接仅使用 SASLPlainMechanism,这是 FCM CCS 要求的 android 客户端。也许,我应该切换身份验证的顺序。 @亚瑟汤普森 您在哪里运行 smack 代码,您的应用服务器还是 Android 客户端? 安卓客户端。 @亚瑟汤普森 您为什么要尝试从 Android 客户端连接到 CCS? 【参考方案1】:大家好:
为了消除错误,我在这里缺少的只是一个 SSLsocket 对象。因为,我对套接字和机器到机器的连接不太了解,所以我一无所知。经过大量阅读,我意识到我错过了这个对象。现在错误消失了,我的 Android 代码和 FCM CCS 之间的连接可以流动。所以我只是将此方法调用添加到我的 configBuilder 对象中:
.setSocketFactory(contexty.getSocketFactory());
但是,我遇到了使用 Smack 处理 SASLAuthentication 的新错误。我将很快发布关于这些错误的问题。似乎我越来越接近建立到 FCM CCS 的可行连接/登录。
【讨论】:
我在 android smack 4.2.0-beta1 中遇到 MucConfigurationNotSupportedException 你知道解决方案吗? @i_o 我不知道你的例外情况。在尝试建立与 FCM CCS 的连接时,我一直在处理异常。我只能告诉您,您应该在以下链接中查看 Smack 的 javadocs:download.igniterealtime.org/smack/docs/latest/javadoc 阅读有关这些类的信息。我认为您的例外来自多用户聊天格式。也许有一个课程可以解决这个问题。阅读文档。 @MathaN 通过阅读方法并查看它们如何与其他 Smack 对象交互,我已经能够处理许多异常。以上是关于Smack 库的受保护类中生成的异常的主要内容,如果未能解决你的问题,请参考以下文章