Joe Bergmark created OWB-706:
--------------------------------

             Summary: Interceptor bindings on methods that come from an 
interface with a generic type may not work
                 Key: OWB-706
                 URL: https://issues.apache.org/jira/browse/OWB-706
             Project: OpenWebBeans
          Issue Type: Bug
          Components: Interceptor and Decorators
    Affects Versions: 1.1.5
            Reporter: Joe Bergmark
            Assignee: Joe Bergmark
            Priority: Minor


If you apply an interceptor binding to a method that implements an interface 
that has a generic type, the interceptor might not be executed.

I'll write some unit tests, but I think the scenario is something like the 
following:

public interface Foo<T>{
  public void doSomething<T>
}

public class Bar implements Foo<String>{
  @MyInterceptorBinding
  public void doSomething<String>
}

When a contextual reference of Bar is cast to Foo, or even to Foo<String>, 
calls to doSomething are no longer intercepted.

What seems to be happening is that due to type erasure, Bar really has to 
implement Foo<Object>, so the JDK adds a bridge method doSomething(Object) to 
Bar that under the covers just calls doSomething(String).  The handler doesn't 
recognize that doSomething(Object) will call doSomething(String) and therefore 
doesn't run the interceptor.

While the problem is complex, I believe the solution is pretty easy (at least 
for the Javassist case).  We can just add a check for bridge methods to the new 
MethodFilter (probably rename it to something less specific than 
FinalizeMethodFilter) so that doSomethign(String) will get called on the proxy 
and we will properly run the interceptor then rather than passing the call to 
doSomething(Object) down to the proxied instance.

This problem goes back to version 1.0, and its a very edge case, so I don't 
think it has to go into 1.1.6.




--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to