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)

Reply via email to