[
https://issues.apache.org/jira/browse/CXF-6078?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alexander Shvid updated CXF-6078:
---------------------------------
Attachment: NameServiceImpl.java
NameService.java
AnnotationUtilsTest.java
AbstractNameServiceImpl.java
JUnit test
> 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
> Attachments: AbstractNameServiceImpl.java, AnnotationUtilsTest.java,
> NameService.java, NameServiceImpl.java
>
>
> 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)