diff --git a/src/main/java/com/crowdin/client/core/http/exceptions/HttpException.java b/src/main/java/com/crowdin/client/core/http/exceptions/HttpException.java index 2ae51d370..f61399395 100644 --- a/src/main/java/com/crowdin/client/core/http/exceptions/HttpException.java +++ b/src/main/java/com/crowdin/client/core/http/exceptions/HttpException.java @@ -9,6 +9,7 @@ public class HttpException extends CrowdinApiException { public Error error; + public String httpResponse; @Data public static class Error { @@ -18,11 +19,12 @@ public static class Error { } - public static HttpException fromMessage(String message) { + public static HttpException fromMessage(String message, String httpResponse) { var resp = new HttpException(); var error = new Error(); error.setMessage(message); resp.setError(error); + resp.setHttpResponse(httpResponse); return resp; } } diff --git a/src/main/java/com/crowdin/client/core/http/impl/http/ApacheHttpClient.java b/src/main/java/com/crowdin/client/core/http/impl/http/ApacheHttpClient.java index 3bea874b1..7f95c04d5 100644 --- a/src/main/java/com/crowdin/client/core/http/impl/http/ApacheHttpClient.java +++ b/src/main/java/com/crowdin/client/core/http/impl/http/ApacheHttpClient.java @@ -120,6 +120,7 @@ private T request(String url, Class clazz, String method) throws HttpException, HttpBadRequestException { HttpUriRequest request = this.buildRequest(method, url, data, config); + String httpResponse = null; try (CloseableHttpResponse response = httpClient.execute(request)) { int statusCode = response.getStatusLine().getStatusCode(); if (statusCode < 200 || statusCode >= 300) { @@ -134,9 +135,10 @@ private T request(String url, if (Void.class.equals(clazz)) { return null; } - return this.jsonTransformer.parse(this.toString(response.getEntity()), clazz); + httpResponse = this.toString(response.getEntity()); + return this.jsonTransformer.parse(httpResponse, clazz); } catch (IOException e) { - throw HttpException.fromMessage(e.getMessage()); + throw HttpException.fromMessage(e.getMessage(), httpResponse); } } diff --git a/src/main/java/com/crowdin/client/core/http/impl/json/CrowdinApiExceptionDeserializer.java b/src/main/java/com/crowdin/client/core/http/impl/json/CrowdinApiExceptionDeserializer.java index ae28af5ca..ed7c3220c 100644 --- a/src/main/java/com/crowdin/client/core/http/impl/json/CrowdinApiExceptionDeserializer.java +++ b/src/main/java/com/crowdin/client/core/http/impl/json/CrowdinApiExceptionDeserializer.java @@ -36,7 +36,7 @@ public CrowdinApiException deserialize(JsonParser p, DeserializationContext ctxt } else if (treeNode.get("error") != null) { return this.objectMapper.treeToValue(treeNode, HttpException.class); } else { - return HttpException.fromMessage(treeNode.toString()); + return HttpException.fromMessage(treeNode.toString(), null); } } } diff --git a/src/test/java/com/crowdin/client/core/http/exception/HttpExceptionTest.java b/src/test/java/com/crowdin/client/core/http/exception/HttpExceptionTest.java index 42c277a30..6058b523b 100644 --- a/src/test/java/com/crowdin/client/core/http/exception/HttpExceptionTest.java +++ b/src/test/java/com/crowdin/client/core/http/exception/HttpExceptionTest.java @@ -9,7 +9,7 @@ public class HttpExceptionTest { @Test public void httpExceptionFromTest() { - HttpException message = HttpException.fromMessage("Exception message!"); + HttpException message = HttpException.fromMessage("Exception message!", null); assertEquals(message.getError().getMessage(), "Exception message!"); } }