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

Head commit for run:
853deb687feb042aa1675b945f5dceaf3eb7e9c4 / James Daugherty 
<[email protected]>
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/39471583926

With regards,
GitHub Actions via GitBox

Reply via email to