hi guys, need some help, first try with ktor, gett...
# ktor
n
hi guys, need some help, first try with ktor, getting the sample template from intellij plugin and with the starter code the app crash.
Copy code
package com.example

import io.ktor.application.*
import io.ktor.response.*
import io.ktor.request.*
import io.ktor.routing.*
import io.ktor.http.*
import io.ktor.gson.*
import io.ktor.features.*
import io.ktor.client.*
import io.ktor.client.features.json.*
import io.ktor.client.request.*
import java.net.URL
import kotlinx.coroutines.*

fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)

@Suppress("unused") // Referenced in application.conf
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
    install(ContentNegotiation) {
        gson {
        }
    }

    val client = HttpClient() {
        install(JsonFeature) {
            serializer = GsonSerializer()
        }
    }
    runBlocking {
//         Sample for making a HTTP Client request
//        /*
//        val message = <http://client.post|client.post><JsonSampleClass> {
//            url(URL("<http://127.0.0.1:8080/path/to/endpoint>"))
//            contentType(ContentType.Application.Json)
//            body = JsonSampleClass(hello = "world")
//        }
//        */
    }

    routing {
        get("/") {
            call.respondText("HELLO WORLD!", contentType = ContentType.Text.Plain)
        }

        get("/json/gson") {
            call.respond(mapOf("hello" to "world"))
        }
    }
}

data class JsonSampleClass(val hello: String)
when i'm commenting out the client its working, can any one help?
c
How do you expect it to work? runBlocking blocks application initialization so client request will always fail as server is not yet started
n
i'm not talking about the runBlocking, i'm talking about the client, when its there the app isnt running at all with this error -
Copy code
Exception in thread "main" java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:71)
	at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Static.call(CallerImpl.kt:80)
	at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod$kotlin_reflect_api(KCallableImpl.kt:166)
	at kotlin.reflect.jvm.internal.KCallableImpl.callBy(KCallableImpl.kt:110)
	at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.callFunctionWithInjection(ApplicationEngineEnvironmentReloading.kt:339)
	at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.executeModuleFunction(ApplicationEngineEnvironmentReloading.kt:290)
	at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.instantiateAndConfigureApplication(ApplicationEngineEnvironmentReloading.kt:267)
	at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.createApplication(ApplicationEngineEnvironmentReloading.kt:124)
	at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.start(ApplicationEngineEnvironmentReloading.kt:239)
	at io.ktor.server.netty.NettyApplicationEngine.start(NettyApplicationEngine.kt:106)
	at io.ktor.server.netty.NettyApplicationEngine.start(NettyApplicationEngine.kt:18)
	at io.ktor.server.engine.ApplicationEngine$DefaultImpls.start$default(ApplicationEngine.kt:46)
	at io.ktor.server.netty.EngineMain.main(EngineMain.kt:17)
	at com.example.ApplicationKt.main(Application.kt:16)
Caused by: java.lang.ExceptionInInitializerError
	at com.example.ApplicationKt.module(Application.kt:26)
	at com.example.ApplicationKt.module$default(Application.kt:20)
	... 18 more
Caused by: java.lang.IllegalStateException: Failed to find HttpClientEngineContainer in classpath via ServiceLoader
	at io.ktor.client.HttpClientJvmKt.<clinit>(HttpClientJvm.kt:23)
	... 20 more

Process finished with exit code 1
c
Ah I see, it looks like some dependency is missing. It should be a client engine dependency included. https://ktor.io/clients/http-client/engines.html
n
thanks a lot, fixed now 👍
strange that the pluhin isnt providing the correct syntax...