You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2020/09/25 16:50:00 UTC

[jira] [Assigned] (GROOVY-9650) MissingPropertyException when accessing @Log-generated log field from a CGLib-proxied outer class

     [ https://issues.apache.org/jira/browse/GROOVY-9650?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Eric Milles reassigned GROOVY-9650:
-----------------------------------

    Assignee: Eric Milles

> MissingPropertyException when accessing @Log-generated log field from a CGLib-proxied outer class
> -------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-9650
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9650
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 3.0.5, 2.5.13
>            Reporter: Andy Wilkinson
>            Assignee: Eric Milles
>            Priority: Major
>
> There appears to be a regression in Groovy 2.5.13. It can be reproduced with the following script:
> {code}
> import groovy.util.logging.Log
> import java.lang.reflect.Method
> import java.util.function.Consumer
> import net.sf.cglib.proxy.MethodInterceptor
> import net.sf.cglib.proxy.MethodProxy
> import net.sf.cglib.proxy.Enhancer
> @Log
> @Grab("cglib:cglib:3.3.0")
> class Thing {
> 	void method() {
> 		Runnable nested = {
> 			log.info("hello")
> 		}
> 		nested.run()
> 	}
> }
> def enhancer = new Enhancer()
> enhancer.superclass = Thing
> enhancer.callback = { obj, method, args, proxy -> 
>     proxy.invokeSuper(obj, args);
> } as MethodInterceptor
> def proxy = enhancer.create()
> proxy.method()
> {code}
> When run with Groovy 2.5.12, {{hello}} is logged:
> {noformat}
> $ sdk use groovy 2.5.12
> Using groovy version 2.5.12 in this shell.
> $ groovy logging.groovy
> Jul 23, 2020 10:20:05 AM java_util_logging_Logger$info$0 call
> INFO: hello
> {noformat}
> With Groovy 2.5.13, the {{log}} field cannot be found:
> {noformat}
> $ sdk use groovy 2.5.13
> Using groovy version 2.5.13 in this shell.
> $ groovy logging.groovy
> Caught: groovy.lang.MissingPropertyException: No such property: log for class: Thing$$EnhancerByCGLIB$$ac2265fe
> groovy.lang.MissingPropertyException: No such property: log for class: Thing$$EnhancerByCGLIB$$ac2265fe
> 	at net.sf.cglib.proxy.MethodProxy$invokeSuper.call(Unknown Source)
> 	at logging$_run_closure1.doCall(logging.groovy:24)
> 	at com.sun.proxy.$Proxy16.intercept(Unknown Source)
> 	at Thing$$EnhancerByCGLIB$$ac2265fe.getProperty(<generated>)
> 	at Thing$_method_closure1.doCall(logging.groovy:14)
> 	at Thing$_method_closure1.doCall(logging.groovy)
> 	at Thing.method(logging.groovy:16)
> 	at Thing$$EnhancerByCGLIB$$ac2265fe.CGLIB$method$0(<generated>)
> 	at Thing$$EnhancerByCGLIB$$ac2265fe$$FastClassByCGLIB$$704960d8.invoke(<generated>)
> 	at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
> 	at net.sf.cglib.proxy.MethodProxy$invokeSuper.call(Unknown Source)
> 	at logging$_run_closure1.doCall(logging.groovy:24)
> 	at com.sun.proxy.$Proxy16.intercept(Unknown Source)
> 	at Thing$$EnhancerByCGLIB$$ac2265fe.method(<generated>)
> 	at Thing$$EnhancerByCGLIB$$ac2265fe$method.call(Unknown Source)
> 	at logging.run(logging.groovy:28)
> {noformat}
> The problem does not occur if {{Thing}} is not proxied or when trying to access a field that explicit declared rather than being created via {{@Log}}.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)