From e822cb84d017c4b9c4d75ee92f8afee9a7321926 Mon Sep 17 00:00:00 2001 From: Hector Castejon Diaz Date: Thu, 3 Apr 2025 15:14:42 +0200 Subject: [PATCH] Fix iempty body --- NEXT_CHANGELOG.md | 1 + .../main/java/com/databricks/sdk/core/ApiClient.java | 3 ++- .../java/com/databricks/sdk/core/ApiClientTest.java | 11 +++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index 50df105cb..b2a34c401 100644 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -5,6 +5,7 @@ ### New Features and Improvements ### Bug Fixes +* Fix issue deserializing HTTP responses with an empty body ([#426](https://github.com/databricks/databricks-sdk-java/pull/426)). ### Documentation diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/ApiClient.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/ApiClient.java index e406a373e..25aeb13f1 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/ApiClient.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/ApiClient.java @@ -421,7 +421,8 @@ public void deserialize(Response response, T object) throws IOException { field.setAccessible(false); } } - } else if (response.getBody() != null) { + // mapper does support empty JSON "{}", but not empty body "" + } else if (response.getBody() != null && response.getBody().available() != 0) { mapper.readerForUpdating(object).readValue(response.getBody()); } } diff --git a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/ApiClientTest.java b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/ApiClientTest.java index a9470c215..b4c22b178 100644 --- a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/ApiClientTest.java +++ b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/ApiClientTest.java @@ -268,6 +268,17 @@ void failIdempotentRequestAfterTooManyRetries() throws IOException { "Request GET /api/2.0/sql/sessions/ failed after 4 retries"); } + @Test + void testEmptyBody() throws IOException { + MyEndpointResponse response = new MyEndpointResponse(); + Request request = getBasicRequest(); + Response rawResponse = new Response(request, 200, "OK", Collections.emptyMap(), ""); + ApiClient client = + getApiClient(request, Collections.singletonList(new SuccessfulResponse(rawResponse))); + + client.deserialize(rawResponse, response); + } + @Test void retryDatabricksApi12RetriableError() throws IOException { Request req = getBasicRequest();