Я использую Java-библиотеку Smack (версия 4.3.1) (JDK 8). После некоторого случайного времени я иногда получаю следующее исключение. Есть ли способ избежать этого?
org.jivesoftware.smack.SmackException$NotConnectedException: The connection [...] (117) is no longer connected. done=true smResumptionPossible=false at
org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketWriter.throwNotConnectedExceptionIfDoneAndResumptionNotPossible(XMPPTCPConnection.java:1320) at
org.jivesoftware.smack.tcp.XMPPTCPConnection.throwNotConnectedExceptionIfAppropriate(XMPPTCPConnection.java:359) at
org.jivesoftware.smack.AbstractXMPPConnection.sendStanza(AbstractXMPPConnection.java:688)
XMPPTCPConnectionConfiguration:
XMPPTCPConnectionConfiguration.builder(
).setSecurityMode(
ConnectionConfiguration.SecurityMode.disabled
).setXmppDomain(
this.domain
).setHostAddress(
InetAddress.getByName(
this.host
)
)
.allowEmptyOrNullUsernames(
).performSaslAnonymousAuthentication(
).build();
Соединение XMPPTCP:
conn.setReplyTimeout(30 * 1000);
conn.setUseStreamManagement(true);
conn.setUseStreamManagementResumption(true);
conn.connect();
conn.login();
Центральные артефакты Maven:
<artifactId>smack-core</artifactId>
<version>4.3.1</version>
<artifactId>smack-tcp</artifactId>
<version>4.3.1</version>
<artifactId>smack-extensions</artifactId>
<version>4.3.1</version>
<artifactId>smack-java7</artifactId>
<version>4.3.1</version>
<artifactId>smack-resolver-dnsjava</artifactId>
<version>4.3.1</version>
Дополнительная информация:
Дело в том, что conn.isConnected
возвращает истину. Внутри, перед отправкой строфы (conn.sendStanza
), Smack выполняет следующие проверки: Если (conn.isConnected
), то если (conn.isSmResumptionPossible
), то sendStanza()
. Если conn.isSmResumptionPossible()
возвращает ложь, то генерируется исключение, которое я получаю.