Skip to content

Commit 474b190

Browse files
authored
Merge pull request #219 from ktorio/nomisrev/fix-graalvm
Fix GraalVM breakage from 3.x.x with KotlinX IO
2 parents 77f87c9 + 456d6bf commit 474b190

File tree

5 files changed

+61
-34
lines changed

5 files changed

+61
-34
lines changed

graalvm/build.gradle.kts

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ plugins {
22
application
33
kotlin("jvm") version "2.1.20"
44
id("io.ktor.plugin") version "3.1.2"
5-
id("org.graalvm.buildtools.native") version "0.9.19"
5+
id("org.graalvm.buildtools.native") version "0.10.6"
6+
kotlin("plugin.serialization") version "2.1.0"
67
}
78

89
group = "io.ktor"
@@ -17,10 +18,12 @@ repositories {
1718

1819
dependencies {
1920
implementation("ch.qos.logback:logback-classic:1.5.12")
20-
implementation("io.ktor:ktor-server-core-jvm")
21-
implementation("io.ktor:ktor-server-cio-jvm")
21+
implementation("io.ktor:ktor-server-cio")
22+
implementation("io.ktor:ktor-server-content-negotiation")
23+
implementation("io.ktor:ktor-serialization-kotlinx-json")
2224

23-
testImplementation("io.ktor:ktor-server-test-host-jvm")
25+
testImplementation("io.ktor:ktor-server-test-host")
26+
testImplementation("io.ktor:ktor-client-content-negotiation")
2427
testImplementation("org.jetbrains.kotlin:kotlin-test")
2528
}
2629

@@ -35,6 +38,15 @@ graalvmNative {
3538
buildArgs.add("--initialize-at-build-time=io.ktor,kotlin")
3639
buildArgs.add("--initialize-at-build-time=org.slf4j.LoggerFactory")
3740

41+
buildArgs.add("--initialize-at-build-time=org.slf4j.helpers.Reporter")
42+
buildArgs.add("--initialize-at-build-time=kotlinx.io.bytestring.ByteString")
43+
buildArgs.add("--initialize-at-build-time=kotlinx.io.SegmentPool")
44+
45+
buildArgs.add("--initialize-at-build-time=kotlinx.serialization.json.Json")
46+
buildArgs.add("--initialize-at-build-time=kotlinx.serialization.json.JsonImpl")
47+
buildArgs.add("--initialize-at-build-time=kotlinx.serialization.json.ClassDiscriminatorMode")
48+
buildArgs.add("--initialize-at-build-time=kotlinx.serialization.modules.SerializersModuleKt")
49+
3850
buildArgs.add("-H:+InstallExitHandlers")
3951
buildArgs.add("-H:+ReportUnsupportedElementsAtRuntime")
4052
buildArgs.add("-H:+ReportExceptionStackTraces")
@@ -50,6 +62,15 @@ graalvmNative {
5062
buildArgs.add("--initialize-at-build-time=io.ktor,kotlin")
5163
buildArgs.add("--initialize-at-build-time=org.slf4j.LoggerFactory")
5264

65+
buildArgs.add("--initialize-at-build-time=org.slf4j.helpers.Reporter")
66+
buildArgs.add("--initialize-at-build-time=kotlinx.io.bytestring.ByteString")
67+
buildArgs.add("--initialize-at-build-time=kotlinx.io.SegmentPool")
68+
69+
buildArgs.add("--initialize-at-build-time=kotlinx.serialization.json.Json")
70+
buildArgs.add("--initialize-at-build-time=kotlinx.serialization.json.JsonImpl")
71+
buildArgs.add("--initialize-at-build-time=kotlinx.serialization.json.ClassDiscriminatorMode")
72+
buildArgs.add("--initialize-at-build-time=kotlinx.serialization.modules.SerializersModuleKt")
73+
5374
buildArgs.add("-H:+InstallExitHandlers")
5475
buildArgs.add("-H:+ReportUnsupportedElementsAtRuntime")
5576
buildArgs.add("-H:+ReportExceptionStackTraces")
@@ -68,5 +89,4 @@ graalvmNative {
6889
events("passed", "skipped", "failed")
6990
}
7091
}
71-
72-
}
92+
}
Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,32 @@
11
package io.ktorgraal
22

3+
import io.ktor.serialization.kotlinx.json.json
4+
import io.ktor.server.application.Application
5+
import io.ktor.server.application.install
36
import io.ktor.server.engine.*
47
import io.ktor.server.cio.*
5-
import io.ktorgraal.plugins.*
8+
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
9+
import io.ktor.server.response.respond
10+
import io.ktor.server.routing.get
11+
import io.ktor.server.routing.routing
12+
import kotlinx.serialization.Serializable
13+
14+
/**
15+
* Generic wrapper to test KotlinX Serialization on GraalVM
16+
*/
17+
@Serializable
18+
data class JsonBody<A>(val body: A)
619

720
fun main() {
8-
embeddedServer(CIO, port = 8080, host = "0.0.0.0") {
9-
configureRouting()
10-
}.start(wait = true)
21+
embeddedServer(CIO, port = 8080, host = "0.0.0.0", module = Application::module)
22+
.start(wait = true)
23+
}
24+
25+
fun Application.module() {
26+
install(ContentNegotiation) { json() }
27+
routing {
28+
get("/") {
29+
call.respond(JsonBody("Hello GraalVM!"))
30+
}
31+
}
1132
}

graalvm/src/main/kotlin/io/ktorgraal/plugins/Routing.kt

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
package io.ktorgraal
22

3+
import io.ktor.client.call.body
4+
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
35
import io.ktor.client.request.*
4-
import io.ktor.client.statement.*
6+
import io.ktor.serialization.kotlinx.json.json
57
import io.ktor.server.testing.*
6-
import io.ktorgraal.plugins.configureRouting
78
import kotlin.test.Test
89
import kotlin.test.assertEquals
910

1011
class ConfigureRoutingTest {
1112

1213
@Test
1314
fun testGetHi() = testApplication {
14-
application {
15-
configureRouting()
16-
}
17-
client.get("/").apply {
18-
assertEquals("Hello GraalVM!", bodyAsText())
15+
application { module() }
16+
val client = createClient {
17+
install(ContentNegotiation) { json() }
1918
}
19+
val response = client.get("/")
20+
val actual = response.body<JsonBody<String>>()
21+
assertEquals(JsonBody("Hello GraalVM!"), actual)
2022
}
2123
}

kweet/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ dependencies {
3535
implementation("org.freemarker:freemarker:2.3.32")
3636
implementation("org.ehcache:ehcache:3.9.7")
3737
implementation("io.ktor:ktor-server-netty-jvm")
38-
testImplementation("io.mockk:mockk:1.13.17")
38+
testImplementation("io.mockk:mockk:1.14.0")
3939
testImplementation("org.jetbrains.kotlin:kotlin-test")
4040
testImplementation("io.ktor:ktor-server-test-host-jvm")
4141
}

0 commit comments

Comments
 (0)