2016-10-31 3 views
0

Я пытаюсь обрабатывать исключения, используя класс ResponseExceptionMapper для моего клиента cxf.ResponseExceptionMapper в cxf-клиенте

ExceptionHandlingCode:

public class MyServiceRestExceptionMapper implements ResponseExceptionMapper<Exception> { 


private static final Logger LOGGER = LoggerFactory.getLogger(MyServiceRestExceptionMapper .class); 

public MyServiceRestExceptionMapper() { 
} 

@Override 
public Exception fromResponse(Response response) { 

    LOGGER.info("Executing MyServiceRestExceptionMapper class"); 

    Response.Status status = Response.Status.fromStatusCode(response.getStatus()); 

    LOGGER.info("Status: ", status.getStatusCode()); 

    switch (status) { 

     case BAD_REQUEST: 
      throw new InvalidServiceRequestException(response.getHeaderString("exception")); 

     case UNAUTHORIZED: 
      throw new AuthorizationException(response.getHeaderString("exception")); 

     case FORBIDDEN: 
      throw new AuthorizationException(response.getHeaderString("exception")); 

     case NOT_FOUND: 
      throw new 
        EmptyResultDataAccessException(response.getHeaderString("exception")); 

     default: 
      throw new InvalidServiceRequestException(response.getHeaderString("exception")); 

    } 

} 

} 

CXF Client Код:

String url1= 
WebClient client = createWebClient(url1).path(/document); 
client.headers(someHeaders); 
Response response = client.post(byteArry); 

Для сценариев успеха, я получаю правильный код ответа 200, но для сценариев отказа, я никогда не получите ответ код.

Также существует лучший способ обработки исключений в клиенте cxf.

Может кто-то помочь в этом.

ответ

1

Как вы зарегистрировали ResponseExceptionMapper для WebClient?

Вам нужно что-то вроде этого

List<Object> providers = new ArrayList<Object>(); 
providers.add(new MyServiceRestExceptionMapper() 
WebClient client = WebClient.create(url, providers); 

я предлагаю использовать WebApplicationException insteadof Exception потому, что поведение по умолчанию будет поднимать этот вид исключения, если нет ResponseExceptionMapper не зарегистрировано. Кроме того, верните исключение, не бросайте его. Редактор исключений должен выглядеть так.

public class MyServiceRestExceptionMapper implements ResponseExceptionMapper<WebApplicationException> 

    public MyServiceRestExceptionMapper() { 
    } 

    @Override 
    public WebApplicationException fromResponse(Response response) { 
     //Create your custom exception with status code 
     WebApplicationException ex = ... 

     return ex; 
    } 
} 
Смежные вопросы