Ktor中的空连接导致java.lang.IllegalStateException:

Ktor中的空连接导致java.lang.IllegalStateException:,java,kotlin,ktor,Java,Kotlin,Ktor,我试图使用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: m

我试图使用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
    }
suspend fun getData(日期:字符串):MyData?{
val client=HttpClient{
默认请求{
contentType(contentType.Application.Json)
}
安装(JsonFeature)
}
var myData:myData?=null
if(client.isActive){
试一试{
val response=client.get{
url(url)
headers.append(“保持活动”,true.toString())
}
val mapper=jacksonObjectMapper()
configure(在未知属性上反序列化feature.FAIL,false);
configure(反序列化功能。接受\u空\u数组\u作为\u空\u对象,true)
if(response.size()>0){
我的数据=
readValue(response.get(0.toString(),MyData::class.java)
}
}捕获(e:非法状态例外){
日志信息(e.message)
}
client.close()
}
返回myData
}

我需要帮助找出这个异常的修复方法,因为我找不到很多关于它的文档。提前感谢。

为了安全起见,您可以尝试一下并检查是否仍然出现异常:您使用的Ktor版本是什么?此错误是否可与其他错误一起重现?如果在每个请求上重新创建客户端,则
保持活动状态
标头的目的是什么?我无法重现
不一致状态:托管连接为空
错误。请创建一个问题并附加一个示例项目以进行复制,好吗?我使用CIO引擎(而不是默认引擎)修复了该异常。谢谢你的建议,@Маааааафааа