How can I dynamically invoke a method on a Proxy, where the method belongs to one of the proxied interfaces?
Normally (i. e. in the non-proxy case), one would do something like this:
protected Object invokeDelegated( Method m, Object[] args,
Object delegate ) throws Exception
{
// m is a method from an interface that is not implemented by delegate
// find the corresponding method in delegate interface and invoke
Class<?>[] parameterTypes = new Class[args.length];
for( int i = 0; i < args.length; i++ ) {
parameterTypes[i] = args[i].getClass();
}
Method meth = delegate.getClass().getMethod( m.getName(),
parameterTypes );
return meth.invoke( delegate, args );
}
However, when delegate is itself a proxy, then delegate.getClass() will give me Proxy, which is not what I'm looking for. How can I dynamically invoke the methods in the proxied interfaces?
> On 08/02/12 08:19, Sebastian wrote:
>> However, when delegate is itself a proxy, then delegate.getClass()
>> will give me Proxy,
> Are you sure? I get $Proxy0 from this:
[coding snipped]
> Output:
> Proxy class is: class $Proxy0
> Called public abstract void java.lang.Runnable.run()
> Called public abstract void java.lang.Runnable.run()
> It also demonstrates a method on the implemented interface being looked
> up and invoked.
Thanks for that. I found my mistake - the reason that I could not find the target method turned out to be different classloaders for the argument types, so the signatures did not match.