Проблема заключается в том, в каком порядке вы делаете что-то в своем классе.
Порядок для vertx:
- Создание экземпляра vertx
- Развертывание вершины
- Вызывается конструктор класса вершины (vertx еще не "внедрен" в него)
- Vertx выполняет некоторые внутренние инициализации
- Vertx вызывает функцию
start
вершины
Вы используете private var router = createRouter()
в классе (за пределами блока start
), и в этот момент vertx
еще не «введен» в класс, поэтому вы получаете исключение.
Если вы перемещаете его в блок start
, он должен работать так, как вы ожидаете:
class CoTest : CoroutineVerticle() {
override suspend fun start() {
val router = createRouter()
vertx.createHttpServer()
.requestHandler(router)
.listenAwait(config.getInteger("http.port", 8182))
}
private fun createRouter() = Router.router(vertx).apply {
get("/favicon.ico").handler { req ->
req.response().end("NO")
}
}
}
suspend fun main() {
val vertx = Vertx.vertx()
vertx.deployVerticleAwait(CoTest::class.java.canonicalName)
}