Skip to content

Move Kotlin value class unboxing to InvocableHandlerMethod #33943

@msotho

Description

@msotho

Problem:
The below code throws the following error on Spring Boot 3.4.0 but not on Spring Boot 3.3.6:

java.lang.ClassCastException: class kotlin.Unit cannot be cast to class kotlin.Result (kotlin.Unit and kotlin.Result are in unnamed module of loader 'app')
interface Repo {
    suspend fun fetch(): Result<Unit>
}

@Repository
class RepoImpl : Repo {
    override suspend fun fetch(): Result<Unit> {
        return Result.success(Unit)
    }
}

@RestController
class HomeAPI(private val repo: Repo) {

    @GetMapping("/")
    suspend fun index(): ResponseEntity<Unit> {
        repo.fetch().getOrThrow()

        return ResponseEntity(HttpStatus.OK)
    }

}

More details:
This seems to occur when I add the spring-boot-starter-data-r2dbc related dependencies

Minimal Repo: https://github.com/msotho/castissue.git

Includes a Unit Test:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
internal class HomeAPITest @Autowired constructor(private val webTestClient: WebTestClient) {

    @Test
    fun `should return http status OK`() {
        webTestClient
            .get()
            .uri("/")
            .accept(MediaType.APPLICATION_JSON)
            .exchange()
            .expectStatus().isOk
    }

}

Metadata

Metadata

Assignees

Labels

theme: kotlinAn issue related to Kotlin supporttype: regressionA bug that is also a regression

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions