private void validateResponse(HTTPResponse response) { HTTPStatus status = response.status(); if (status.code >= HTTPStatus.OK.code && status.code <= 300) return; try { if (status == HTTPStatus.BAD_REQUEST) { ValidationErrorResponse validationErrorResponse = JSON.fromJSON(ValidationErrorResponse.class, response.text()); throw new RemoteServiceException( "failed to validate, message=" + validationErrorResponse.message + ", fieldErrors=" + validationErrorResponse.fieldErrors); } else { ErrorResponse errorResponse = JSON.fromJSON(ErrorResponse.class, response.text()); throw new RemoteServiceException(errorResponse.message); } } catch (RemoteServiceException e) { throw e; } catch (Exception e) { logger.warn( "failed to decode response, statusCode={}, responseText={}", status.code, response.text(), e); throw new RemoteServiceException( "received non 2xx status code, status=" + status.code + ", remoteMessage=" + response.text(), e); } }