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

Jörg Hohwiller commented on CXF-7119:
-------------------------------------

Just to clarify:
I as a user of a remote client want to have control over the Exception that is 
actually thrown from the client proxy.
The user of the client proxy shall be able to do:

{code:java}
MyRestService client = createRestClient(MyRestService.class);
try {
  return client.doSomething(args);
} catch (MyCustomConnectionException e) {
  if (e.isRetry()) {
    return client.doSomething(args);
  } else {
    throw e;
  }
} catch (MyCustomSemanticException e) {
  handleSemanticError(e);
}
{code}

This is just a stupid example but it should outline that I do not want to write 
such code all over my apps/microservices:
{code:java}
try {
  return client.doSomething(args);
} catch (ProcessingException e) {
  Throwable cause = e.getCause();
  if (cause instanceof MyCustomConnectionException e) {
    MyCustomConnectionException myEx = (MyCustomConnectionException) e;
...
{code}

I hope you see the value if the user of CXF has the full control of the 
exception that is thrown out of the client proxy.

> Introduce a JAX-RS client provider for catching technical exceptions (e.g. 
> IOException)
> ---------------------------------------------------------------------------------------
>
>                 Key: CXF-7119
>                 URL: https://issues.apache.org/jira/browse/CXF-7119
>             Project: CXF
>          Issue Type: New Feature
>          Components: JAX-RS
>    Affects Versions: 3.1.3
>            Reporter: Jörg Hohwiller
>            Assignee: Sergey Beryozkin
>             Fix For: 3.2.0, 3.1.9
>
>
> When using CXF for REST/JAX-RS service clients I quickly noticed that I need 
> to tweak the error handling. My services use an ExceptionMapper that provides 
> error details via JSON result payload. Hence I want to access this and render 
> an exception with further details and more context information what works 
> fine with ResponseExceptionMapper. 
> However, when a technical error (IOException such as unkown host, connection 
> refused, timeout, etc.) occurrs I only get generic errors from CXF client 
> (org.apache.cxf.interceptor.Fault: Could not send Message.). This is 
> undesired but unfortunately my custom ResponseExceptionMapper is never called 
> for such technical errors. There seems to be no way to archive my goal with 
> CXF itself. I could only wrap the client again with a custom written dynamic 
> proxy to reach my goal.
> It seems that CXF hardwires this behaviour:
> https://github.com/apache/cxf/blob/master/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java#L596
> https://github.com/apache/cxf/blob/master/core/src/main/java/org/apache/cxf/interceptor/MessageSenderInterceptor.java#L64
> It would be awesome if in such case ResponseExceptionMapper would also be 
> applied so I have the chance to interfere and produce better exceptions (e.g. 
> with a message containing the name of the application/microservice that could 
> not be called, the URL, etc.) for my individual needs.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to