private final ResponseErrorHandler parent;
+ public GraphApiErrorResponseErrorHandler()
+ {
+ this(null);
+ }
+
public GraphApiErrorResponseErrorHandler(ResponseErrorHandler errorHandler)
{
this.parent =
}
+ private boolean hasGraphApiError(ClientHttpResponse response) throws IOException
+ {
+ return HttpStatus.Series.CLIENT_ERROR.equals(response.getStatusCode().series());
+ }
+
@Override
public boolean hasError(ClientHttpResponse response) throws IOException
{
- return
- HttpStatus.Series.CLIENT_ERROR.equals(response.getStatusCode().series())
- || this.parent.hasError(response);
+ return hasGraphApiError(response) || parent.hasError(response);
}
@Override
public void handleError(final ClientHttpResponse response) throws IOException
{
- GraphApiErrorResponseErrorHandler.handleError(parent, response);
- }
+ if (!hasGraphApiError(response))
+ {
+ parent.handleError(response);
+ return;
+ }
- public static void handleError(
- final ResponseErrorHandler parent,
- final ClientHttpResponse response
- )
- throws
- IOException
- {
if (response.getBody() == null)
{
// There is no body to interpret in the HTTP-message
final byte[] body = FileCopyUtils.copyToByteArray(response.getBody());
GraphApiException error;
- try
+ error = GraphApiException.create(response.getStatusCode(), response.getHeaders(), body);
+ if (LOG.isInfoEnabled())
+ LOG.info("error-response: {}", new String(body, Charset.forName("UTF-8")));
+ if (!error.getClass().equals(ErrorResponseParsingErrorException.class))
{
- error = GraphApiException.create(response.getStatusCode(), response.getHeaders(), body);
- if (LOG.isInfoEnabled())
- LOG.info("error-response: {}", new String(body, Charset.forName("UTF-8")));
+ throw error;
}
- catch (Exception e)
+ else
{
// The body of the HTTP-message could not be parsed.
// Let the parent error-handler try to handle the response.
-
- LOG.warn(
- "Could not convert the response into an exception, " +
- "because the body is unparsable: error={}, body={}",
- e.toString(),
- new String(body, Charset.forName("UTF-8"))
- );
-
// To do so, we have to wrap the original response to fill in
// the buffered body, if needed
ClientHttpResponse buffered = new ClientHttpResponse()
parent.handleError(buffered);
return;
}
-
- throw error;
}
}