diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ErrorDetail.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ErrorDetail.java index 6b71ccc28..ae6ffb1ec 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ErrorDetail.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ErrorDetail.java @@ -26,7 +26,7 @@ public ErrorDetail( this.type = type; this.reason = reason; this.domain = domain; - this.metadata = Collections.unmodifiableMap(metadata); + this.metadata = metadata != null ? Collections.unmodifiableMap(metadata) : null; } public String getType() { diff --git a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/error/ApiErrorBodyDeserializationSuite.java b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/error/ApiErrorBodyDeserializationSuite.java index f7b53b2ec..d87229870 100644 --- a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/error/ApiErrorBodyDeserializationSuite.java +++ b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/error/ApiErrorBodyDeserializationSuite.java @@ -64,4 +64,16 @@ void handleUnexpectedFieldsInErrorResponse() throws JsonProcessingException { assertEquals(error.getErrorCode(), "theerrorcode"); assertEquals(error.getMessage(), "themessage"); } + + @Test + void handleNullMetadataFieldInErrorResponse() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + String rawResponse = + "{\"error_code\":\"METASTORE_DOES_NOT_EXIST\",\"message\":\"No metastore assigned for the current workspace.\",\"details\":[{\"@type\":\"type.googleapis.com/google.rpc.RequestInfo\",\"request_id\":\"1888e822-f1b5-4996-85eb-0d2b5cc402e6\",\"serving_data\":\"\"}]}"; + ApiErrorBody error = mapper.readValue(rawResponse, ApiErrorBody.class); + + assertEquals(error.getErrorCode(), "METASTORE_DOES_NOT_EXIST"); + assertEquals(error.getMessage(), "No metastore assigned for the current workspace."); + } + }