Noam Mor created FELIX-4344:
-------------------------------

             Summary: Behavior of dependency manager broken for 
java.lang.reflect.Proxy objects
                 Key: FELIX-4344
                 URL: https://issues.apache.org/jira/browse/FELIX-4344
             Project: Felix
          Issue Type: Bug
          Components: Dependency Manager
            Reporter: Noam Mor


https://svn.apache.org/repos/asf/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/InvocationUtil.java

The object on which a method should be called is explicitly checked to be a 
proxy, and if it is, the method is called on the proxy object's 
InvocationHandler. This assumes that the InvocationHandler's invoke() method 
delegates calls to the InvocationHandler. If this is not the case (as it can 
easily be - you can do whatever in the invoke() method, such as write to a 
queue for later execution, in which case the method is not in the 
InvocationHandler), then the method calls on the Proxy would not be called. So 
despite you being able to call proxyObject.someFunction(), you can't use the 
InvocationUtil to run the function someFunction on the proxyObject.

This is screwing me over in a project of mine, where I try to register a proxy 
object with a rather sophisticated InvocationHandler to OSGi with a dependency 
on an other service, and the dependency manager cannot execute the 
setOtherService() methods on my proxy because the InvocationHandler does not 
have a setOtherService method.

I am not a reflection expert but it sounds to me that removing those 3 lines of 
 direct handling of proxy objects should "just work" - there is no reason not 
to just call the method on the proxy object and let the InvocationHandler's 
invoke() do what it is supposed to do.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to