[ 
https://issues.apache.org/jira/browse/CXF-4496?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13611644#comment-13611644
 ] 

Parwiz Rezai commented on CXF-4496:
-----------------------------------

actually this fix would help with what i have reported in this bug 

https://issues.apache.org/jira/browse/CXF-4912

what's happening right now is if you say have two different exception in your 
throws method
myMethod() throws Exception2, Exception1;  

and mappers for both of those exceptions on server side and client side (maybe 
you are doing different
things.. so yes i know you can have one super class if they are both checked 
exceptions.. let's say 
you have a legacy exception and you don't have source for it.. and a new 
exception you created for something else)

now the client code is blind and picks the first mapper when a fault occurs so 
in this it will always
default to Exception2ResponeMapper on client side.. even if in the method you 
happen to throw Exception1
this is incorrect..

i think the fix above suggested will fix it because then we look at all 
exceptions in the throws clause
and only select the mapper for that specific exception (or its parent if found).


                
> find of ResponseExceptionMapper do not handle runtime exceptions
> ----------------------------------------------------------------
>
>                 Key: CXF-4496
>                 URL: https://issues.apache.org/jira/browse/CXF-4496
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 2.6.2
>            Reporter: n0rad
>            Assignee: Sergey Beryozkin
>            Priority: Minor
>             Fix For: 2.6.3, 2.7.0
>
>
> In org.apache.cxf.jaxrs.client.ClientProxyImpl.findExceptionMapper(Method, 
> Message)
> The responseExceptionMapper is selected based on exception defined in the 
> resource method signature but this method may have thrown a RuntimeException :
> {code:java} 
> @Path("/")
> public interface RestMcuBoardResource {
>     @GET
>     public RestMcuBoard getBoard();
> }
> {code} 
> does not work where this one work
> {code:java} 
> @Path("/")
> public interface RestMcuBoardResource {
>     @GET
>     public RestMcuBoard getBoard() throws runtimeException;
> }
> {code}
> a fix could be :
> {code:java} 
>     private static ResponseExceptionMapper<?> findExceptionMapper(Method m, 
> Message message) {
>         ProviderFactory pf = ProviderFactory.getInstance(message);
>         for (Class<?> exType : m.getExceptionTypes()) {
>             ResponseExceptionMapper<?> mapper = 
> pf.createResponseExceptionMapper(exType);
>             if (mapper != null) {
>                 return mapper;
>             }
>         }
> +        return pf.createResponseExceptionMapper(RuntimeException.class);
> -        return null; 
>     }
> {code} 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to