首页 > 解决方案 > 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
    }

我需要帮助找出解决此异常的方法,因为我找不到太多关于它的文档。提前致谢。

标签: javakotlinktor

解决方案


推荐阅读