I guess there is an error in the ProviderFactory of jaxrs component.
--------------------------------------------------------------------

                 Key: CXF-1727
                 URL: https://issues.apache.org/jira/browse/CXF-1727
             Project: CXF
          Issue Type: Bug
          Components: REST
    Affects Versions: 2.1.2
         Environment: Windowx XP, Apache Tomcat and i used spring configuration
            Reporter: Frank Ittermann


I thin in the method createExceptionMapper of the 
org.apache.cxf.jaxrs.provider.ProviderFactory class is an error.
The following code block is wrong i guess:

if (exceptionType.isAssignableFrom((Class<?>)args[i])) {
   InjectionUtils.injectContextFields(em.getProvider(), em, m);
   InjectionUtils.injectContextMethods(em.getProvider(), em, m);
   return em.getProvider();
}

The if doesn't work correctly. I wrote a ExceptionMapper<Exception> for the 
general Exception class. And i tested this ExceptionMapper with a throw of a 
IOException and it was not called. So I decided to debug the ExceptionMapper 
staff and i found that the if in the code block a above is false.

So i wrote a little test to understand this.

System.out.println(IOException.class.isAssignableFrom(Exception.class));
System.out.println(Exception.class.isAssignableFrom(IOException.class));

The first line of code is what your if does and if you check this you will see 
it returns false. But Exception is the super class
of IOException how could it possible. The answer is easy because the 
isAssignableFrom method check if the 
passed class parameter is the same or a child of the class on which 
isAssignableForm was called. So The bug fix will be the second line they return 
true. 

Please change the wrong code block the right order of parameter will be

if (((Class<?>)args[i]).isAssignableFrom(exceptionType))

Thank for your attention


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to