You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Alexander Shvid (JIRA)" <ji...@apache.org> on 2014/11/01 04:38:33 UTC
[jira] [Created] (CXF-6078) AnnotationUtils.getAnnotatedMethod for
abstract classes non inherent from interface
Alexander Shvid created CXF-6078:
------------------------------------
Summary: AnnotationUtils.getAnnotatedMethod for abstract classes non inherent from interface
Key: CXF-6078
URL: https://issues.apache.org/jira/browse/CXF-6078
Project: CXF
Issue Type: Bug
Components: JAX-RS
Affects Versions: 2.7.13
Reporter: Alexander Shvid
I created the special junit test to demonstrate this bug.
Suppose we have NameService with annotated methods: 'get' and 'set'.
NameServiceImpl that implements NameService and only 'get' method.
AbstractNameServiceImpl that implements 'set' method.
NameServiceImpl extends AbstractNameServiceImpl.
For this case AnnotationUtils.getAnnotatedMethod returns wrond annotatedMethod for 'set'. It is actually same method as requested one, not a interface 'set' method.
m = public javax.ws.rs.core.Response NameServiceImpl.get(java.lang.String)
a = public abstract javax.ws.rs.core.Response NameService.get(java.lang.String)
m = public javax.ws.rs.core.Response AbstractNameServiceImpl.set(java.lang.String)
a = public javax.ws.rs.core.Response AbstractNameServiceImpl.set(java.lang.String)
JDK1.7.0_51
It happens because AnnotationUtils.getAnnotatedMethod has only single argument Method, that is only from super class AbstractNameServiceImpl and does not check hierarchy of the NameServiceImpl itself.
AnnotationUtils.getAnnotatedMethod needs additional Class<?> serviceClass argument for this purpose.
It actually affects ResourceUtils.createClassResourceInfo
that calls AnnotationUtils.getAnnotatedMethod to detect annotated method in the loop
private static void evaluateResourceClass(ClassResourceInfo cri, boolean enableStatic) {
MethodDispatcher md = new MethodDispatcher();
for (Method m : cri.getServiceClass().getMethods()) {
Method annotatedMethod = AnnotationUtils.getAnnotatedMethod(m);
It knows about ServiceClass, but does not use this information to walk in classes hierarchy.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)