[
https://issues.apache.org/jira/browse/CXF-1645?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12604769#action_12604769
]
Andreas Benneke commented on CXF-1645:
--------------------------------------
I've been thinking a bit about our solution(s) and think it might fail, if the
method in question is overloaded. The for-loop (and even my spring solution)
might end up calling a method with the wrong signature (which was not
annotated). This might lead to unexpected results if the methods are doing
different things...
What about this (going back to the original implementation):
Method targetMethod = getTarget().getClass().getMethod(method.getName(),
method.getParameterTypes());
targetMethod.invoke(getTarget(), resource);
Any thoughts?
> ResourceInjector fails to inject into (Spring) proxies if resource to be in
> injected is subclassed
> --------------------------------------------------------------------------------------------------
>
> Key: CXF-1645
> URL: https://issues.apache.org/jira/browse/CXF-1645
> Project: CXF
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.1, 2.0.6, 2.1.1, 2.0.7
> Reporter: Andreas Benneke
> Assignee: Daniel Kulp
> Fix For: 2.1.1, 2.0.7
>
> Attachments: ResourceInjector.patch
>
>
> If the target is a proxy ResourceInjector tries to resolve an appropriate
> setter method for the resource using
> Method targetMethod = getTarget().getClass().getMethod(method.getName(),
> new Class[]{resource.getClass()});
> targetMethod.invoke(getTarget(), resource);
> This fails if the resource has been subclassed because getMethod() (still)
> does only exact matches (see
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4287725).
> This is (for example) the reason why injecting the WebServiceContext into a
> (Spring) proxy does not work: The real implementation WebServiceContextImpl
> is always a subclass (see thread http://www.mail-archive.com/[EMAIL
> PROTECTED]/msg03050.html)
> As a solutions, the ResourceInjector might implement it's own matching
> algorithm or e. g. use Spring's MethodInvoker instead which already contains
> such an algorithm:
> MethodInvoker targetInvoker = new MethodInvoker();
> targetInvoker.setTargetObject(getTarget());
> targetInvoker.setTargetMethod(method.getName());
> targetInvoker.setArguments(new Object[]{resource});
> targetInvoker.prepare();
> targetInvoker.invoke();
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.