/* * Copyright (c) 2018. Open Text Corporation. All Rights Reserved. */ package com.emc.documentum.rest.client.sample.client.impl.jackson; import java.io.IOException; import java.util.List; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.client.ResponseErrorHandler; import com.emc.documentum.rest.client.sample.client.DCTMRestErrorException; import com.emc.documentum.rest.client.sample.model.RestError; import com.emc.documentum.rest.client.sample.model.json.JsonRestError; /** * the error response handler to process json error response by Jackson */ public class DCTMJacksonErrorHandler implements ResponseErrorHandler { private final List<HttpMessageConverter<?>> converters; public DCTMJacksonErrorHandler(List<HttpMessageConverter<?>> converters) { this.converters = converters; } @Override public boolean hasError(ClientHttpResponse response) throws IOException { return response.getStatusCode().series() == HttpStatus.Series.CLIENT_ERROR || response.getStatusCode().series() == HttpStatus.Series.SERVER_ERROR; } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void handleError(ClientHttpResponse response) throws IOException { MediaType mediaType = response.getHeaders().getContentType(); RestError error = null; for(HttpMessageConverter converter : converters) { if(converter.canRead(JsonRestError.class, mediaType)) { error = (RestError)converter.read(JsonRestError.class, response); break; } } throw new DCTMRestErrorException(response.getHeaders(), response.getStatusCode(), error); } }