首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持Ktor的JVM目标

支持Ktor的JVM目标
EN

Stack Overflow用户
提问于 2021-11-23 02:56:35
回答 1查看 175关注 0票数 2

过去几个月,我一直在本地运行Ktor服务器应用程序,并部署到Heroku,没有任何问题。然而,在部署最新版本之后,我开始看到在Heroku上任何试图处理请求体的POST请求中都会出现以下错误:

代码语言:javascript
复制
java.lang.NoSuchMethodError: java.nio.ByteBuffer.limit(I)Ljava/nio/ByteBuffer;
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at io.ktor.utils.io.ExceptionUtilsJvmKt$createConstructor$$inlined$safeCtor$3.invoke(ExceptionUtilsJvm.kt:103)
    at io.ktor.utils.io.ExceptionUtilsJvmKt$createConstructor$$inlined$safeCtor$3.invoke(ExceptionUtilsJvm.kt:90)
    at io.ktor.utils.io.ExceptionUtilsJvmKt.tryCopyException(ExceptionUtilsJvm.kt:66)
    at io.ktor.utils.io.ByteBufferChannelKt.rethrowClosed(ByteBufferChannel.kt:2456)
    at io.ktor.utils.io.ByteBufferChannelKt.access$rethrowClosed(ByteBufferChannel.kt:1)
    at io.ktor.utils.io.ByteBufferChannel.readRemaining$suspendImpl(ByteBufferChannel.kt:2126)
    at io.ktor.utils.io.ByteBufferChannel.readRemaining(ByteBufferChannel.kt)
    at io.ktor.utils.io.ByteReadChannelKt.readRemaining(ByteReadChannel.kt:217)
    at io.ktor.serialization.SerializationConverter.convertForReceive(SerializationConverter.kt:158)
    at io.ktor.features.ContentNegotiation$Feature$install$3.invokeSuspend(ContentNegotiation.kt:224)
    at io.ktor.features.ContentNegotiation$Feature$install$3.invoke(ContentNegotiation.kt)
    at io.ktor.features.ContentNegotiation$Feature$install$3.invoke(ContentNegotiation.kt)
    at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:248)
    at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:116)
    at io.ktor.util.pipeline.SuspendFunctionGun.execute(SuspendFunctionGun.kt:136)
    at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:78)
    at io.ktor.request.ApplicationReceiveFunctionsKt.receive(ApplicationReceiveFunctions.kt:116)
    at io.ktor.request.ApplicationReceiveFunctionsKt.receiveOrNull(ApplicationReceiveFunctions.kt:135)

考虑到请求体可能有一些意想不到的东西,我首先尝试将call.receive<MyObject>()更改为call.receiveOrNull<MyObject>(),但问题仍然存在。

据我所知,这可能是JVM不匹配的问题,因此我检查了Heroku的Java文档并了解到默认JVM为1.8。然后,我用Java1.8在本地运行我的应用程序,并且能够重新创建相同的行为。

将我的应用程序的Heroku上的目标JVM更改为版本11之后,这显然解决了问题。虽然我最近添加了Ktor Authentication“特性”,但我看不到任何其他可能导致此的更改。我试图在Ktor文档中找到最低所需的JVM目标是什么,但未能找到它。这是很好的工作,但我希望有更多的信心向前迈进。

为了确保服务器的正确执行,并在将来避免这类问题,我想问一下支持的JVM目标是什么(如果可能的话,将它添加到Ktor文档中)。

EN

回答 1

Stack Overflow用户

发布于 2021-12-26 03:13:29

我通过升级到ktor_version:1.6.7来解决问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70074860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档