Dynamic proxy causes downstream code to not find annotations. How to solve?
Hi,
Consider this class:
class MyClass {
@MyAnnotation
public void myMethod() { ... }
}
Which is coerced to this interface:
interface SomeIterface {
public void myMethod() { ... }
}
If downstream code is looking for "MyAnnotation" it will not find it when u=
sing a dynamic proxy.
Here is a "default" dynamic proxy, which effectively does nothing except to=
call the method and report its exceptions as normal:
public Object invoke(Object proxy, Method method, Object[] args) throws =
Throwable {
try {
return method.invoke(obj, args);
} catch (InvocationTargetException e) {
throw e.getCause();
}
}
The problem is that when invoke is called the Method passed to it is the on=
e from the interface, not the object, so it is SomeInterface.myMethod(), wh=
ich does not have any annotations.
What I want is to try to match the method on the actual object being proxie=
d, or perhaps some specific interface that I have identified, and effective=
ly "lift" the actual method being invoked, to being that one.
I am running into this problem because I am using the client proxy from Jer=
sey, which uses a dynamic proxy to create a REST client for me, given an HT=
TP endpoint and an interface. The problem is that when you call it, it chec=
ks that there is a @Path annotation on the method being called, and in this=
case that method is on a different interface, and it fails to find the ann=
otation. So I need to make sure that I call it with the method from the cor=
rect interface.
Any suggestions? A problem you have run into before? Thanks for your though=
ts.
Rupert