java - Ktor 中的空连接导致 java.lang.IllegalStateException:
问题描述
我正在尝试使用 Ktor 从 API 端点读取数据,并IllegalStateException
经常获得所谓的null
连接。以下是异常的样子:
2021-04-06 11:14:48.407 [Ktor-client-apache] DEBUG o.a.h.i.n.client.InternalIODispatch - http-outgoing-4 [CLOSED] Exception
java.lang.IllegalStateException: Inconsistent state: managed connection is null
at org.apache.http.util.Asserts.check(Asserts.java:34)
at org.apache.http.impl.nio.client.AbstractClientExchangeHandler.manageConnectionPersistence(AbstractClientExchangeHandler.java:285)
at org.apache.http.impl.nio.client.MainClientExec.responseCompleted(MainClientExec.java:352)
at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.responseCompleted(DefaultClientExchangeHandlerImpl.java:172)
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.processResponse(HttpAsyncRequestExecutor.java:448)
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.inputReady(HttpAsyncRequestExecutor.java:338)
at org.apache.http.impl.nio.client.InternalRequestExecutor.inputReady(InternalRequestExecutor.java:83)
at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:265)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39)
at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114)
at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591)
at java.lang.Thread.run(Thread.java:748)
下面是我的导致异常的代码。我正在为每个请求创建一个客户端以确保安全,并在最后关闭它,并检查它是否处于活动状态:
suspend fun getData(date: String): MyData? {
val client = HttpClient {
defaultRequest {
contentType(ContentType.Application.Json)
}
install(JsonFeature)
}
var myData: MyData? = null
if (client.isActive) {
try {
val response = client.get<JsonArray> {
url(url)
headers.append("keep-alive", true.toString())
}
val mapper = jacksonObjectMapper()
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true)
if (response.size() > 0) {
myData =
mapper.readValue(response.get(0).toString(), MyData::class.java)
}
} catch (e: IllegalStateException) {
log.info(e.message)
}
client.close()
}
return myData
}
我需要帮助找出解决此异常的方法,因为我找不到太多关于它的文档。提前致谢。
解决方案
推荐阅读
- nginx - 如何在 nginx 中添加请求正文的内容作为响应标头?
- arrays - 如何找到不在另一个数组中的数组元素
- powershell - 如何在 where-object 中使用 $args 并在 powershell 中调用命令
- php - 在 php 中运行仅在尚未运行时才运行的连续循环的最佳方法是什么?
- excel - 如何在 Excel 中创建新的计算列 - 将 SSAS 模型中的数据转换为 Excel 表格形式
- ios - 后台服务问题:使用地理定位器时应用程序崩溃
- xacml - XACML 阅读资源
- javascript - 如何获取更新的在线会员
- java - 为什么我在启动简单代码 (JavaFX) 时遇到问题?
- python - 在pyshark中计算TCP重传