Please note 2: This looks like the same issue as #17359. The only difference is that we use coroutines and Quarkus 2.0.0.CR2 this time.
Adapted description from #17359
We are using resteasy reactive and the reactive rest client in Quarkus 2.0.0.CR2, gradle and Kotlin with coroutines. Everytime the quarkus dev mode reloads the code, Quarkus is broken and we have to restart it.
We were able to break it down to a small reproducer. The problem seems to appear, when we have a POST resource that receives a DTO in the body and passes this dto to a rest client call that receives a generified response (best take a look at the ReactiveResource:getClient() method in the reproducer). When the service is freshly started gradlew quarkusDev, it all works fine. However, as soon as you change something and quarkus recompiles the code on the next call, it is broken.
We added a logging of the received object and there we get the following error:
2021-05-19 15:52:52,547 ERROR [org.jbo.res.rea.com.cor.AbstractResteasyReactiveContext] (vert.x-eventloop-thread-10) Request failed: java.lang.ClassCastException: class org.acme.dto.ApiResponse cannot be cast to class org.acme.dto.ApiResponse (org.acme.dto.ApiResponse is in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @df5f5c0; org.acme.dto.ApiResponse is in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @1091b449)
at org.acme.ReactiveResource$getClient$1.apply(ReactiveResource.kt:18)
at io.smallrye.context.impl.wrappers.SlowContextualFunction.apply(SlowContextualFunction.java:21)
...
When we do not add the logging, the response from the resource is just empty.
Please note: In the reproducer, we use the rest client to call the same quarkus service again. This is just to make the reproducer self contained. We also experienced this when calling another service.
Describe the bug
Please note 2: This looks like the same issue as #17359. The only difference is that we use coroutines and Quarkus 2.0.0.CR2 this time.
Adapted description from #17359
We are using resteasy reactive and the reactive rest client in Quarkus 2.0.0.CR2, gradle and Kotlin with coroutines. Everytime the quarkus dev mode reloads the code, Quarkus is broken and we have to restart it.
We were able to break it down to a small reproducer. The problem seems to appear, when we have a POST resource that receives a DTO in the body and passes this dto to a rest client call that receives a generified response (best take a look at the
ReactiveResource:getClient()
method in the reproducer). When the service is freshly startedgradlew quarkusDev
, it all works fine. However, as soon as you change something and quarkus recompiles the code on the next call, it is broken.We added a logging of the received object and there we get the following error:
When we do not add the logging, the response from the resource is just empty.
Please note: In the reproducer, we use the rest client to call the same quarkus service again. This is just to make the reproducer self contained. We also experienced this when calling another service.
Expected behavior
Quarkus Dev Mode works and reloads the classes.
Actual behavior
The classes do not seem to be reloaded correctly.
To Reproduce
Download reproducer and unzip 2021-05-19-restclient-dev-mode (2).zip
In the project run
./gradlew quarkusDev
Call the endpoint with
Change anything in the code to cause a recompile on the next call
Call the service again and observe the error in the log.
https://github.com/quarkusio/quarkus/issues/17597
$upstream:17597$