You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@grails.apache.org by GitBox <gi...@apache.org> on 2026/10/20 22:35:26 UTC

[GH] (grails-core/fix/rx-observable-scalar-projection): Workflow run "CI" failed!

The GitHub Actions job "CI" on grails-core.git/fix/rx-observable-scalar-projection has failed.
Run started by GitHub user jdaugherty (triggered by jdaugherty).

Head commit for run:
853deb687feb042aa1675b945f5dceaf3eb7e9c4 / James Daugherty <jd...@jdresources.net>
Implement a reactive projection by its return type in the RxJava data service adapters

A data service method returning an Observable of a scalar property projection, such as
`Observable<String> findBookAuthor(String title)`, failed at runtime with
"GroovyCastException: Cannot cast object 'Stephen King' ... to class 'java.lang.Iterable'":
SingleResultAdapter accepted the method for FindOnePropertyProjectionImplementer on the
projected type alone, without checking that the method returns a Single, so the generated
body found one value while the scheduling transform typed the transactional delegate as
returning an Iterable. The mirror image broke a Single of an interface projection, such as
`Single<BookInfo> findByTitle(String title)`: ObservableResultAdapter claimed it for
FindAllByInterfaceProjectionImplementer, and the list it built failed to cast to the interface.

Both adapters now require their own reactive return type before delegating to a projection
implementer, so an Observable of a projection lists every projected value and a Single of a
projection finds one. ObservableResultAdapter also no longer takes the Observable's generic
type as the domain class of a projection, which made `Observable<String> listBookAuthor(String title)`
fail at compile time with "No property exists on domain class [java.lang.String]".

Fixes #16692

Report URL: https://github.com/apache/grails-core/actions/runs/39471583813

With regards,
GitHub Actions via GitBox