The GitHub Actions job "CI - Groovy Joint Validation Build" on 
grails-core.git/groovy-proxy-getproxiedclass-fix has failed.
Run started by GitHub user codeconsole (triggered by codeconsole).

Head commit for run:
ac24d2223e101d0d92b5fabc9e5c76ef3a2a38e5 / Scott Murphy Heiberg 
<[email protected]>
fix(grails-datamapping-core): GroovyProxyFactory.getProxiedClass walks past 
entity to Object

GroovyProxyFactory.createProxy() builds metaclass-only proxies: a real
entity instance with a ProxyInstanceMetaClass attached. For those,
proxy.getClass() is already the entity class.

getProxiedClass() was copied from JavassistProxyFactory, whose proxies
are runtime subclasses where getSuperclass() correctly recovers the
entity. Applied to metaclass-only proxies, the same call walks one
level past the entity — to java.lang.Object for any entity extending
Object directly.

Downstream callers that feed the result into
MappingContext.getPersistentEntity (notably
UniqueConstraint.processValidate) get null back and NPE on the next
dereference. Surfaces on MongoDB / Neo4j (no Javassist on the
classpath → GroovyProxyFactory wins) when cascade validation hits a
not-yet-unwrapped to-one association.

Drop the superclass walk; proxy.getClass() is the entity class for
both the proxy and non-proxy paths.

Adds GroovyProxyFactorySpec covering both paths to lock the contract.

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

With regards,
GitHub Actions via GitBox

Reply via email to