From 3f2c269f4650a2f5151bf6ae4136c5823edf817b Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 13 Aug 2025 19:26:48 +0000 Subject: [PATCH 1/4] Update DatabricksError --- .../databricks/sdk/core/DatabricksError.java | 35 ++--- .../sdk/core/error/AbstractErrorMapper.java | 8 +- .../sdk/core/error/ApiErrorBody.java | 33 +---- .../databricks/sdk/core/error/ApiErrors.java | 4 +- .../sdk/core/error/ErrorDetail.java | 64 --------- .../sdk/core/error/ErrorOverride.java | 4 +- .../sdk/core/error/PrivateLinkInfo.java | 4 +- .../error/PrivateLinkValidationError.java | 4 +- .../sdk/core/error/details/DebugInfo.java | 13 +- .../sdk/core/error/details/ErrorDetails.java | 17 +-- .../details/ErrorDetailsDeserializer.java | 4 + .../error/details/ErrorDetailsSerializer.java | 123 ++++++++++++++++++ .../sdk/core/error/details/ErrorInfo.java | 13 +- .../sdk/core/error/details/Help.java | 13 +- .../error/details/PreconditionFailure.java | 13 +- .../sdk/core/error/details/QuotaFailure.java | 13 +- .../sdk/core/error/platform/Aborted.java | 5 +- .../core/error/platform/AlreadyExists.java | 5 +- .../sdk/core/error/platform/BadRequest.java | 7 +- .../sdk/core/error/platform/Cancelled.java | 7 +- .../sdk/core/error/platform/DataLoss.java | 5 +- .../core/error/platform/DeadlineExceeded.java | 7 +- .../core/error/platform/InternalError.java | 7 +- .../error/platform/InvalidParameterValue.java | 7 +- .../sdk/core/error/platform/InvalidState.java | 5 +- .../sdk/core/error/platform/NotFound.java | 7 +- .../core/error/platform/NotImplemented.java | 7 +- .../core/error/platform/PermissionDenied.java | 7 +- .../error/platform/RequestLimitExceeded.java | 5 +- .../error/platform/ResourceAlreadyExists.java | 5 +- .../core/error/platform/ResourceConflict.java | 7 +- .../error/platform/ResourceDoesNotExist.java | 5 +- .../error/platform/ResourceExhausted.java | 5 +- .../platform/TemporarilyUnavailable.java | 7 +- .../core/error/platform/TooManyRequests.java | 7 +- .../core/error/platform/Unauthenticated.java | 7 +- .../sdk/core/error/platform/Unknown.java | 5 +- .../databricks/sdk/core/ApiClientTest.java | 13 +- .../ApiErrorBodyDeserializationSuite.java | 19 ++- 39 files changed, 240 insertions(+), 286 deletions(-) delete mode 100644 databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ErrorDetail.java create mode 100644 databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsSerializer.java diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/DatabricksError.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/DatabricksError.java index 8e072b278..e61006e41 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/DatabricksError.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/DatabricksError.java @@ -1,9 +1,6 @@ package com.databricks.sdk.core; -import com.databricks.sdk.core.error.ErrorDetail; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; +import com.databricks.sdk.core.error.details.ErrorDetails; /** * The result of checking whether {@code ApiClient} should retry a request. @@ -17,45 +14,35 @@ public class DatabricksError extends DatabricksException { private final Throwable cause; private final String errorCode; private final int statusCode; - - private final List details; + private final ErrorDetails errorDetails; public DatabricksError(int statusCode) { - this("", "OK", statusCode, null, Collections.emptyList()); + this("", "OK", statusCode, null, ErrorDetails.builder().build()); } public DatabricksError(String errorCode, String message) { - this(errorCode, message, 400, null, Collections.emptyList()); + this(errorCode, message, 400, null, ErrorDetails.builder().build()); } public DatabricksError(String errorCode, String message, int statusCode) { - this(errorCode, message, statusCode, null, Collections.emptyList()); + this(errorCode, message, statusCode, null, ErrorDetails.builder().build()); } public DatabricksError(String errorCode, int statusCode, Throwable cause) { - this(errorCode, cause.getMessage(), statusCode, cause, Collections.emptyList()); + this(errorCode, cause.getMessage(), statusCode, cause, ErrorDetails.builder().build()); } - public DatabricksError( - String errorCode, String message, int statusCode, List details) { + public DatabricksError(String errorCode, String message, int statusCode, ErrorDetails details) { this(errorCode, message, statusCode, null, details); } private DatabricksError( - String errorCode, - String message, - int statusCode, - Throwable cause, - List details) { + String errorCode, String message, int statusCode, Throwable cause, ErrorDetails details) { super(message, cause); this.errorCode = errorCode; this.cause = cause; this.statusCode = statusCode; - this.details = details == null ? Collections.emptyList() : details; - } - - public List getErrorInfo() { - return this.getDetailsByType("type.googleapis.com/google.rpc.ErrorInfo"); + this.errorDetails = details == null ? ErrorDetails.builder().build() : details; } public String getErrorCode() { @@ -70,7 +57,7 @@ public Throwable getCause() { return cause; } - List getDetailsByType(String type) { - return this.details.stream().filter(e -> e.getType().equals(type)).collect(Collectors.toList()); + public ErrorDetails getErrorDetails() { + return errorDetails; } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/AbstractErrorMapper.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/AbstractErrorMapper.java index 5633a5c83..d40758f8e 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/AbstractErrorMapper.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/AbstractErrorMapper.java @@ -1,9 +1,9 @@ package com.databricks.sdk.core.error; import com.databricks.sdk.core.DatabricksError; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.core.http.Response; import java.util.HashMap; -import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,12 +13,12 @@ abstract class AbstractErrorMapper { @FunctionalInterface protected interface ErrorCodeRule { - DatabricksError create(String message, List details); + DatabricksError create(String message, ErrorDetails details); } @FunctionalInterface protected interface StatusCodeRule { - DatabricksError create(String errorCode, String message, List details); + DatabricksError create(String errorCode, String message, ErrorDetails details); } public DatabricksError apply(Response resp, ApiErrorBody errorBody) { @@ -35,7 +35,7 @@ public DatabricksError apply(Response resp, ApiErrorBody errorBody) { int code = resp.getStatusCode(); String message = errorBody.getMessage(); String errorCode = errorBody.getErrorCode(); - List details = errorBody.getErrorDetails(); + ErrorDetails details = errorBody.getErrorDetails(); if (errorCodeMapping.containsKey(errorCode)) { return errorCodeMapping.get(errorCode).create(message, details); } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ApiErrorBody.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ApiErrorBody.java index f622430dc..167c36d02 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ApiErrorBody.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ApiErrorBody.java @@ -3,9 +3,6 @@ import com.databricks.sdk.core.error.details.ErrorDetails; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; /** * The union of all JSON error responses from the Databricks APIs, not including HTML responses. @@ -20,7 +17,7 @@ public class ApiErrorBody { private String scimStatus; private String scimType; private String api12Error; - private List errorDetails; + private ErrorDetails errorDetails; public ApiErrorBody() {} @@ -48,14 +45,14 @@ public ApiErrorBody( this.scimStatus = scimStatus; this.scimType = scimType; this.api12Error = api12Error; - this.errorDetails = fromDetails(errorDetails); + this.errorDetails = errorDetails; } - public List getErrorDetails() { + public ErrorDetails getErrorDetails() { return errorDetails; } - public void setErrorDetails(List errorDetails) { + public void setErrorDetails(ErrorDetails errorDetails) { this.errorDetails = errorDetails; } @@ -106,26 +103,4 @@ public String getApi12Error() { public void setApi12Error(String api12Error) { this.api12Error = api12Error; } - - /** - * Converts the error details to a list of ErrorDetail objects. This only supports the ErrorInfo - * type. - * - * @param details The error details to convert. - * @return A list of ErrorDetail objects. - */ - private static List fromDetails(ErrorDetails details) { - if (details == null) { - return Collections.emptyList(); - } - if (!details.errorInfo().isPresent()) { - return Collections.emptyList(); - } - return Arrays.asList( - new ErrorDetail( - "type.googleapis.com/google.rpc.ErrorInfo", - details.errorInfo().get().reason(), - details.errorInfo().get().domain(), - details.errorInfo().get().metadata())); - } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ApiErrors.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ApiErrors.java index a2b4d740c..249b0b1a8 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ApiErrors.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ApiErrors.java @@ -2,11 +2,11 @@ import com.databricks.sdk.core.DatabricksError; import com.databricks.sdk.core.DatabricksException; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.core.http.Response; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.*; import java.nio.charset.StandardCharsets; -import java.util.Collections; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.io.IOUtils; @@ -52,7 +52,7 @@ private static ApiErrorBody readErrorFromResponse(Response response) { errorBody.setErrorCode("SCIM_" + errorBody.getScimStatus()); } if (errorBody.getErrorDetails() == null) { - errorBody.setErrorDetails(Collections.emptyList()); + errorBody.setErrorDetails(ErrorDetails.builder().build()); } return errorBody; } 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 deleted file mode 100644 index ae6ffb1ec..000000000 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ErrorDetail.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.databricks.sdk.core.error; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Collections; -import java.util.Map; - -@JsonIgnoreProperties(ignoreUnknown = true) -public class ErrorDetail { - - private String type; - - private String reason; - - private String domain; - - private Map metadata; - - public ErrorDetail() {} - - public ErrorDetail( - @JsonProperty("@type") String type, - @JsonProperty("reason") String reason, - @JsonProperty("domain") String domain, - @JsonProperty("metadata") Map metadata) { - this.type = type; - this.reason = reason; - this.domain = domain; - this.metadata = metadata != null ? Collections.unmodifiableMap(metadata) : null; - } - - public String getType() { - return type; - } - - public String getReason() { - return reason; - } - - public Map getMetadata() { - return metadata; - } - - public String getDomain() { - return domain; - } - - @Override - public String toString() { - return "ErrorDetails{" - + "type='" - + type - + '\'' - + ", reason='" - + reason - + '\'' - + ", domain='" - + domain - + '\'' - + ", metadata=" - + metadata - + '}'; - } -} diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ErrorOverride.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ErrorOverride.java index cb35d0544..344d40aab 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ErrorOverride.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/ErrorOverride.java @@ -2,9 +2,9 @@ import com.databricks.sdk.core.DatabricksError; import com.databricks.sdk.core.DatabricksException; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.core.http.Response; import java.lang.reflect.Constructor; -import java.util.List; import java.util.regex.Pattern; public class ErrorOverride { @@ -68,7 +68,7 @@ public T makeError(ApiErrorBody body) { // All errors have a 2-argument constructor for the message and the error body. if (parameterTypes.length == 2 && parameterTypes[0].equals(String.class) - && parameterTypes[1].equals(List.class)) { + && parameterTypes[1].equals(ErrorDetails.class)) { try { return (T) constructor.newInstance(body.getMessage(), body.getErrorDetails()); } catch (Exception e) { diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/PrivateLinkInfo.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/PrivateLinkInfo.java index 6b11453ae..f64a85d53 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/PrivateLinkInfo.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/PrivateLinkInfo.java @@ -1,9 +1,9 @@ package com.databricks.sdk.core.error; import com.databricks.sdk.core.DatabricksEnvironment; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.core.http.Response; import com.databricks.sdk.core.utils.Cloud; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -61,6 +61,6 @@ static PrivateLinkValidationError createPrivateLinkValidationError(Response resp DatabricksEnvironment env = DatabricksEnvironment.getEnvironmentFromHostname(resp.getUrl().getHost()); PrivateLinkInfo info = PRIVATE_LINK_INFOS.get(env.getCloud()); - return new PrivateLinkValidationError(info.errorMessage(), Collections.emptyList()); + return new PrivateLinkValidationError(info.errorMessage(), ErrorDetails.builder().build()); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/PrivateLinkValidationError.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/PrivateLinkValidationError.java index d7145c216..6ec6c4da5 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/PrivateLinkValidationError.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/PrivateLinkValidationError.java @@ -1,10 +1,10 @@ package com.databricks.sdk.core.error; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.core.error.platform.PermissionDenied; -import java.util.List; public class PrivateLinkValidationError extends PermissionDenied { - public PrivateLinkValidationError(String message, List details) { + public PrivateLinkValidationError(String message, ErrorDetails details) { super("PRIVATE_LINK_VALIDATION_ERROR", message, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/DebugInfo.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/DebugInfo.java index d13c87cc3..8d3a4e035 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/DebugInfo.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/DebugInfo.java @@ -77,7 +77,7 @@ public abstract class DebugInfo { * @return a new builder instance */ public static Builder builder() { - return new AutoValue_DebugInfo.Builder(); + return new AutoValue_DebugInfo.Builder().setStackEntries(Collections.emptyList()); } /** Builder for constructing DebugInfo instances. */ @@ -108,15 +108,6 @@ public abstract static class Builder { * * @return a new DebugInfo instance */ - public DebugInfo build() { - if (stackEntries() == null) { - setStackEntries(Collections.emptyList()); - } - return autoBuild(); - } - - abstract List stackEntries(); - - abstract DebugInfo autoBuild(); + public abstract DebugInfo build(); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetails.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetails.java index cd2714aca..015c299b6 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetails.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetails.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.auto.value.AutoValue; import java.util.Collections; import java.util.List; @@ -13,6 +14,7 @@ */ @AutoValue @JsonDeserialize(using = ErrorDetailsDeserializer.class) +@JsonSerialize(using = ErrorDetailsSerializer.class) public abstract class ErrorDetails { public abstract Optional errorInfo(); @@ -36,7 +38,7 @@ public abstract class ErrorDetails { public abstract List unknownDetails(); public static Builder builder() { - return new AutoValue_ErrorDetails.Builder(); + return new AutoValue_ErrorDetails.Builder().setUnknownDetails(Collections.emptyList()); } @AutoValue.Builder @@ -61,17 +63,6 @@ public abstract static class Builder { public abstract Builder setUnknownDetails(List unknownDetails); - abstract List unknownDetails(); - - abstract ErrorDetails autoBuild(); - - public ErrorDetails build() { - try { - unknownDetails(); - } catch (IllegalStateException e) { - setUnknownDetails(Collections.emptyList()); - } - return autoBuild(); - } + public abstract ErrorDetails build(); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsDeserializer.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsDeserializer.java index 867cf9ae3..c8c029e1e 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsDeserializer.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsDeserializer.java @@ -11,6 +11,10 @@ import java.util.ArrayList; import java.util.List; +/** + * Custom deserializer for ErrorDetails that converts an array of JSON objects into an ErrorDetails + * object. + */ public class ErrorDetailsDeserializer extends JsonDeserializer { private static final String ERROR_INFO_TYPE = "type.googleapis.com/google.rpc.ErrorInfo"; diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsSerializer.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsSerializer.java new file mode 100644 index 000000000..f8934a223 --- /dev/null +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsSerializer.java @@ -0,0 +1,123 @@ +package com.databricks.sdk.core.error.details; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.node.ObjectNode; +import java.io.IOException; + +/** + * Custom serializer for ErrorDetails that converts the object back to the array format expected by + * the ErrorDetailsDeserializer. + */ +public class ErrorDetailsSerializer extends JsonSerializer { + + @Override + public void serialize( + ErrorDetails errorDetails, JsonGenerator gen, SerializerProvider serializers) + throws IOException { + gen.writeStartArray(); + + // Serialize ErrorInfo if present + if (errorDetails.errorInfo().isPresent()) { + serializeWithType( + gen, + "type.googleapis.com/google.rpc.ErrorInfo", + errorDetails.errorInfo().get(), + serializers); + } + + // Serialize RequestInfo if present + if (errorDetails.requestInfo().isPresent()) { + serializeWithType( + gen, + "type.googleapis.com/google.rpc.RequestInfo", + errorDetails.requestInfo().get(), + serializers); + } + + // Serialize RetryInfo if present + if (errorDetails.retryInfo().isPresent()) { + serializeWithType( + gen, + "type.googleapis.com/google.rpc.RetryInfo", + errorDetails.retryInfo().get(), + serializers); + } + + // Serialize DebugInfo if present + if (errorDetails.debugInfo().isPresent()) { + serializeWithType( + gen, + "type.googleapis.com/google.rpc.DebugInfo", + errorDetails.debugInfo().get(), + serializers); + } + + // Serialize QuotaFailure if present + if (errorDetails.quotaFailure().isPresent()) { + serializeWithType( + gen, + "type.googleapis.com/google.rpc.QuotaFailure", + errorDetails.quotaFailure().get(), + serializers); + } + + // Serialize PreconditionFailure if present + if (errorDetails.preconditionFailure().isPresent()) { + serializeWithType( + gen, + "type.googleapis.com/google.rpc.PreconditionFailure", + errorDetails.preconditionFailure().get(), + serializers); + } + + // Serialize BadRequest if present + if (errorDetails.badRequest().isPresent()) { + serializeWithType( + gen, + "type.googleapis.com/google.rpc.BadRequest", + errorDetails.badRequest().get(), + serializers); + } + + // Serialize ResourceInfo if present + if (errorDetails.resourceInfo().isPresent()) { + serializeWithType( + gen, + "type.googleapis.com/google.rpc.ResourceInfo", + errorDetails.resourceInfo().get(), + serializers); + } + + // Serialize Help if present + if (errorDetails.help().isPresent()) { + serializeWithType( + gen, "type.googleapis.com/google.rpc.Help", errorDetails.help().get(), serializers); + } + + // Serialize unknown details + for (JsonNode unknownDetail : errorDetails.unknownDetails()) { + gen.writeObject(unknownDetail); + } + + gen.writeEndArray(); + } + + private void serializeWithType( + JsonGenerator gen, String type, Object obj, SerializerProvider serializers) + throws IOException { + // Let Jackson serialize the object to a JsonNode first. + ObjectMapper mapper = new ObjectMapper(); + JsonNode node = mapper.valueToTree(obj); + + // Add the @type field. + if (node instanceof ObjectNode) { + ((ObjectNode) node).put("@type", type); + } + + gen.writeObject(node); + } +} diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorInfo.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorInfo.java index 53c23d270..b710af346 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorInfo.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorInfo.java @@ -71,7 +71,7 @@ public abstract class ErrorInfo { * @return a new builder instance */ public static Builder builder() { - return new AutoValue_ErrorInfo.Builder(); + return new AutoValue_ErrorInfo.Builder().setMetadata(Collections.emptyMap()); } /** Builder for constructing ErrorInfo instances. */ @@ -111,15 +111,6 @@ public abstract static class Builder { * * @return a new ErrorInfo instance */ - public ErrorInfo build() { - if (metadata() == null) { - setMetadata(Collections.emptyMap()); - } - return autoBuild(); - } - - abstract Map metadata(); - - abstract ErrorInfo autoBuild(); + public abstract ErrorInfo build(); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/Help.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/Help.java index f631803c2..db62d039b 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/Help.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/Help.java @@ -62,7 +62,7 @@ public abstract class Help { * @return a new builder instance */ public static Builder builder() { - return new AutoValue_Help.Builder(); + return new AutoValue_Help.Builder().setLinks(Collections.emptyList()); } /** Builder for constructing Help instances. */ @@ -84,16 +84,7 @@ public abstract static class Builder { * * @return a new Help instance */ - public Help build() { - if (links() == null) { - setLinks(Collections.emptyList()); - } - return autoBuild(); - } - - abstract List links(); - - abstract Help autoBuild(); + public abstract Help build(); } /** diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/PreconditionFailure.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/PreconditionFailure.java index ca5a16692..820502721 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/PreconditionFailure.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/PreconditionFailure.java @@ -55,7 +55,7 @@ public abstract class PreconditionFailure { * @return a new builder instance */ public static Builder builder() { - return new AutoValue_PreconditionFailure.Builder(); + return new AutoValue_PreconditionFailure.Builder().setViolations(Collections.emptyList()); } /** Builder for constructing PreconditionFailure instances. */ @@ -77,16 +77,7 @@ public abstract static class Builder { * * @return a new PreconditionFailure instance */ - public PreconditionFailure build() { - if (violations() == null) { - setViolations(Collections.emptyList()); - } - return autoBuild(); - } - - abstract List violations(); - - abstract PreconditionFailure autoBuild(); + public abstract PreconditionFailure build(); } /** diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/QuotaFailure.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/QuotaFailure.java index 1e5c2fa22..65311b128 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/QuotaFailure.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/QuotaFailure.java @@ -49,7 +49,7 @@ public abstract class QuotaFailure { * @return a new builder instance */ public static Builder builder() { - return new AutoValue_QuotaFailure.Builder(); + return new AutoValue_QuotaFailure.Builder().setViolations(Collections.emptyList()); } /** Builder for constructing QuotaFailure instances. */ @@ -71,16 +71,7 @@ public abstract static class Builder { * * @return a new QuotaFailure instance */ - public QuotaFailure build() { - if (violations() == null) { - setViolations(Collections.emptyList()); - } - return autoBuild(); - } - - abstract List violations(); - - abstract QuotaFailure autoBuild(); + public abstract QuotaFailure build(); } /** diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Aborted.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Aborted.java index bac89a9ec..eab6580f1 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Aborted.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Aborted.java @@ -2,16 +2,15 @@ package com.databricks.sdk.core.error.platform; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** * the operation was aborted, typically due to a concurrency issue such as a sequencer check failure */ @Generated public class Aborted extends ResourceConflict { - public Aborted(String message, List details) { + public Aborted(String message, ErrorDetails details) { super("ABORTED", message, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/AlreadyExists.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/AlreadyExists.java index 6396f5a92..f028d8659 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/AlreadyExists.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/AlreadyExists.java @@ -2,14 +2,13 @@ package com.databricks.sdk.core.error.platform; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** operation was rejected due a conflict with an existing resource */ @Generated public class AlreadyExists extends ResourceConflict { - public AlreadyExists(String message, List details) { + public AlreadyExists(String message, ErrorDetails details) { super("ALREADY_EXISTS", message, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/BadRequest.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/BadRequest.java index 12e2dd0e8..bb22f54f7 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/BadRequest.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/BadRequest.java @@ -3,18 +3,17 @@ package com.databricks.sdk.core.error.platform; import com.databricks.sdk.core.DatabricksError; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** the request is invalid */ @Generated public class BadRequest extends DatabricksError { - public BadRequest(String message, List details) { + public BadRequest(String message, ErrorDetails details) { super("BAD_REQUEST", message, 400, details); } - public BadRequest(String errorCode, String message, List details) { + public BadRequest(String errorCode, String message, ErrorDetails details) { super(errorCode, message, 400, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Cancelled.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Cancelled.java index 03850d441..6ce4995c0 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Cancelled.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Cancelled.java @@ -3,18 +3,17 @@ package com.databricks.sdk.core.error.platform; import com.databricks.sdk.core.DatabricksError; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** the operation was explicitly canceled by the caller */ @Generated public class Cancelled extends DatabricksError { - public Cancelled(String message, List details) { + public Cancelled(String message, ErrorDetails details) { super("CANCELLED", message, 499, details); } - public Cancelled(String errorCode, String message, List details) { + public Cancelled(String errorCode, String message, ErrorDetails details) { super(errorCode, message, 499, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/DataLoss.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/DataLoss.java index 61b39e36f..8d13f9757 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/DataLoss.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/DataLoss.java @@ -2,14 +2,13 @@ package com.databricks.sdk.core.error.platform; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** unrecoverable data loss or corruption */ @Generated public class DataLoss extends InternalError { - public DataLoss(String message, List details) { + public DataLoss(String message, ErrorDetails details) { super("DATA_LOSS", message, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/DeadlineExceeded.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/DeadlineExceeded.java index 79c011643..caaa12cd4 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/DeadlineExceeded.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/DeadlineExceeded.java @@ -3,18 +3,17 @@ package com.databricks.sdk.core.error.platform; import com.databricks.sdk.core.DatabricksError; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** the deadline expired before the operation could complete */ @Generated public class DeadlineExceeded extends DatabricksError { - public DeadlineExceeded(String message, List details) { + public DeadlineExceeded(String message, ErrorDetails details) { super("DEADLINE_EXCEEDED", message, 504, details); } - public DeadlineExceeded(String errorCode, String message, List details) { + public DeadlineExceeded(String errorCode, String message, ErrorDetails details) { super(errorCode, message, 504, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InternalError.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InternalError.java index db70ccb69..020cd1fc4 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InternalError.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InternalError.java @@ -3,18 +3,17 @@ package com.databricks.sdk.core.error.platform; import com.databricks.sdk.core.DatabricksError; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** some invariants expected by the underlying system have been broken */ @Generated public class InternalError extends DatabricksError { - public InternalError(String message, List details) { + public InternalError(String message, ErrorDetails details) { super("INTERNAL_ERROR", message, 500, details); } - public InternalError(String errorCode, String message, List details) { + public InternalError(String errorCode, String message, ErrorDetails details) { super(errorCode, message, 500, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InvalidParameterValue.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InvalidParameterValue.java index 4f4fb3757..43f0f9b6e 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InvalidParameterValue.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InvalidParameterValue.java @@ -2,14 +2,13 @@ package com.databricks.sdk.core.error.platform; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; -/** supplied value for a parameter was invalid */ +/** invalid parameter value */ @Generated public class InvalidParameterValue extends BadRequest { - public InvalidParameterValue(String message, List details) { + public InvalidParameterValue(String message, ErrorDetails details) { super("INVALID_PARAMETER_VALUE", message, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InvalidState.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InvalidState.java index f27efd4ad..ff6eaa5a4 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InvalidState.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/InvalidState.java @@ -2,14 +2,13 @@ package com.databricks.sdk.core.error.platform; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** unexpected state */ @Generated public class InvalidState extends BadRequest { - public InvalidState(String message, List details) { + public InvalidState(String message, ErrorDetails details) { super("INVALID_STATE", message, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/NotFound.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/NotFound.java index 30939c6d9..c4f603bfa 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/NotFound.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/NotFound.java @@ -3,18 +3,17 @@ package com.databricks.sdk.core.error.platform; import com.databricks.sdk.core.DatabricksError; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** the operation was performed on a resource that does not exist */ @Generated public class NotFound extends DatabricksError { - public NotFound(String message, List details) { + public NotFound(String message, ErrorDetails details) { super("NOT_FOUND", message, 404, details); } - public NotFound(String errorCode, String message, List details) { + public NotFound(String errorCode, String message, ErrorDetails details) { super(errorCode, message, 404, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/NotImplemented.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/NotImplemented.java index 4761ee9ef..bdedc545a 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/NotImplemented.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/NotImplemented.java @@ -3,18 +3,17 @@ package com.databricks.sdk.core.error.platform; import com.databricks.sdk.core.DatabricksError; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** the operation is not implemented or is not supported/enabled in this service */ @Generated public class NotImplemented extends DatabricksError { - public NotImplemented(String message, List details) { + public NotImplemented(String message, ErrorDetails details) { super("NOT_IMPLEMENTED", message, 501, details); } - public NotImplemented(String errorCode, String message, List details) { + public NotImplemented(String errorCode, String message, ErrorDetails details) { super(errorCode, message, 501, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/PermissionDenied.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/PermissionDenied.java index 96dddf2f7..87596a48d 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/PermissionDenied.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/PermissionDenied.java @@ -3,18 +3,17 @@ package com.databricks.sdk.core.error.platform; import com.databricks.sdk.core.DatabricksError; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** the caller does not have permission to execute the specified operation */ @Generated public class PermissionDenied extends DatabricksError { - public PermissionDenied(String message, List details) { + public PermissionDenied(String message, ErrorDetails details) { super("PERMISSION_DENIED", message, 403, details); } - public PermissionDenied(String errorCode, String message, List details) { + public PermissionDenied(String errorCode, String message, ErrorDetails details) { super(errorCode, message, 403, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/RequestLimitExceeded.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/RequestLimitExceeded.java index 4ac0bd2b0..b9c814316 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/RequestLimitExceeded.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/RequestLimitExceeded.java @@ -2,14 +2,13 @@ package com.databricks.sdk.core.error.platform; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** cluster request was rejected because it would exceed a resource limit */ @Generated public class RequestLimitExceeded extends TooManyRequests { - public RequestLimitExceeded(String message, List details) { + public RequestLimitExceeded(String message, ErrorDetails details) { super("REQUEST_LIMIT_EXCEEDED", message, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceAlreadyExists.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceAlreadyExists.java index 5ca274901..7a53e377a 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceAlreadyExists.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceAlreadyExists.java @@ -2,14 +2,13 @@ package com.databricks.sdk.core.error.platform; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** operation was rejected due a conflict with an existing resource */ @Generated public class ResourceAlreadyExists extends ResourceConflict { - public ResourceAlreadyExists(String message, List details) { + public ResourceAlreadyExists(String message, ErrorDetails details) { super("RESOURCE_ALREADY_EXISTS", message, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceConflict.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceConflict.java index 8530091a8..33b94ad1e 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceConflict.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceConflict.java @@ -3,18 +3,17 @@ package com.databricks.sdk.core.error.platform; import com.databricks.sdk.core.DatabricksError; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** maps to all HTTP 409 (Conflict) responses */ @Generated public class ResourceConflict extends DatabricksError { - public ResourceConflict(String message, List details) { + public ResourceConflict(String message, ErrorDetails details) { super("RESOURCE_CONFLICT", message, 409, details); } - public ResourceConflict(String errorCode, String message, List details) { + public ResourceConflict(String errorCode, String message, ErrorDetails details) { super(errorCode, message, 409, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceDoesNotExist.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceDoesNotExist.java index 23952007f..4cfdebc8d 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceDoesNotExist.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceDoesNotExist.java @@ -2,14 +2,13 @@ package com.databricks.sdk.core.error.platform; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** operation was performed on a resource that does not exist */ @Generated public class ResourceDoesNotExist extends NotFound { - public ResourceDoesNotExist(String message, List details) { + public ResourceDoesNotExist(String message, ErrorDetails details) { super("RESOURCE_DOES_NOT_EXIST", message, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceExhausted.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceExhausted.java index 4652c9a3d..4a7af7078 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceExhausted.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/ResourceExhausted.java @@ -2,14 +2,13 @@ package com.databricks.sdk.core.error.platform; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** operation is rejected due to per-user rate limiting */ @Generated public class ResourceExhausted extends TooManyRequests { - public ResourceExhausted(String message, List details) { + public ResourceExhausted(String message, ErrorDetails details) { super("RESOURCE_EXHAUSTED", message, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/TemporarilyUnavailable.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/TemporarilyUnavailable.java index 111b909cc..d19658908 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/TemporarilyUnavailable.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/TemporarilyUnavailable.java @@ -3,18 +3,17 @@ package com.databricks.sdk.core.error.platform; import com.databricks.sdk.core.DatabricksError; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** the service is currently unavailable */ @Generated public class TemporarilyUnavailable extends DatabricksError { - public TemporarilyUnavailable(String message, List details) { + public TemporarilyUnavailable(String message, ErrorDetails details) { super("TEMPORARILY_UNAVAILABLE", message, 503, details); } - public TemporarilyUnavailable(String errorCode, String message, List details) { + public TemporarilyUnavailable(String errorCode, String message, ErrorDetails details) { super(errorCode, message, 503, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/TooManyRequests.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/TooManyRequests.java index d8b7bf611..71f9dabeb 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/TooManyRequests.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/TooManyRequests.java @@ -3,18 +3,17 @@ package com.databricks.sdk.core.error.platform; import com.databricks.sdk.core.DatabricksError; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** maps to HTTP code: 429 Too Many Requests */ @Generated public class TooManyRequests extends DatabricksError { - public TooManyRequests(String message, List details) { + public TooManyRequests(String message, ErrorDetails details) { super("TOO_MANY_REQUESTS", message, 429, details); } - public TooManyRequests(String errorCode, String message, List details) { + public TooManyRequests(String errorCode, String message, ErrorDetails details) { super(errorCode, message, 429, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Unauthenticated.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Unauthenticated.java index 5d191b3e6..1fc4721fb 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Unauthenticated.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Unauthenticated.java @@ -3,18 +3,17 @@ package com.databricks.sdk.core.error.platform; import com.databricks.sdk.core.DatabricksError; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** the request does not have valid authentication (AuthN) credentials for the operation */ @Generated public class Unauthenticated extends DatabricksError { - public Unauthenticated(String message, List details) { + public Unauthenticated(String message, ErrorDetails details) { super("UNAUTHENTICATED", message, 401, details); } - public Unauthenticated(String errorCode, String message, List details) { + public Unauthenticated(String errorCode, String message, ErrorDetails details) { super(errorCode, message, 401, details); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Unknown.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Unknown.java index 8e5096bed..2bee05d50 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Unknown.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/platform/Unknown.java @@ -2,14 +2,13 @@ package com.databricks.sdk.core.error.platform; -import com.databricks.sdk.core.error.ErrorDetail; +import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.support.Generated; -import java.util.List; /** this error is used as a fallback if the platform-side mapping is missing some reason */ @Generated public class Unknown extends InternalError { - public Unknown(String message, List details) { + public Unknown(String message, ErrorDetails details) { super("UNKNOWN", message, details); } } 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 ef51f8363..efd4fbae2 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 @@ -3,13 +3,13 @@ import static org.junit.jupiter.api.Assertions.*; import com.databricks.sdk.core.error.ApiErrorBody; -import com.databricks.sdk.core.error.ErrorDetail; import com.databricks.sdk.core.error.PrivateLinkValidationError; import com.databricks.sdk.core.error.details.ErrorDetails; import com.databricks.sdk.core.error.details.ErrorInfo; import com.databricks.sdk.core.http.Request; import com.databricks.sdk.core.http.Response; import com.databricks.sdk.core.utils.FakeTimer; +import com.databricks.sdk.core.utils.SerDeUtils; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -24,7 +24,7 @@ import org.junit.jupiter.api.Test; public class ApiClientTest { - private final ObjectMapper mapper = new ObjectMapper(); + private final ObjectMapper mapper = SerDeUtils.createMapper(); static class MyEndpointResponse { @JsonProperty("key") @@ -349,13 +349,8 @@ void errorDetails() throws JsonProcessingException { getSuccessResponse(req)), MyEndpointResponse.class, DatabricksError.class); - List responseErrors = error.getErrorInfo(); - assertEquals(responseErrors.size(), 1); - ErrorDetail responseError = responseErrors.get(0); - assertEquals("type.googleapis.com/google.rpc.ErrorInfo", responseError.getType()); - assertEquals("reason", responseError.getReason()); - assertEquals(metadata, responseError.getMetadata()); - assertEquals("domain", responseError.getDomain()); + + assertEquals(errorDetails, error.getErrorDetails()); } @Test 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 f6a7b896b..0f4998fb2 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 @@ -2,6 +2,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import com.databricks.sdk.core.error.details.ErrorDetails; +import com.databricks.sdk.core.error.details.ErrorInfo; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.*; @@ -46,11 +48,18 @@ void deserializeDetailedResponse() throws JsonProcessingException { ApiErrorBody error = mapper.readValue(rawResponse, ApiErrorBody.class); Map metadata = new HashMap<>(); metadata.put("etag", "detailsetag"); - ErrorDetail errorDetails = error.getErrorDetails().get(0); - assertEquals(errorDetails.getType(), "type.googleapis.com/google.rpc.ErrorInfo"); - assertEquals(errorDetails.getReason(), "detailreason"); - assertEquals(errorDetails.getDomain(), "detaildomain"); - assertEquals(errorDetails.getMetadata(), metadata); + + ErrorDetails expectedErrorDetails = + ErrorDetails.builder() + .setErrorInfo( + ErrorInfo.builder() + .setReason("detailreason") + .setDomain("detaildomain") + .setMetadata(metadata) + .build()) + .build(); + + assertEquals(expectedErrorDetails, error.getErrorDetails()); } // Test that an ApiErrorBody can be deserialized, even if the response includes unexpected From 4673d6d9b38af3efdafcae0db8b6501eecf3fe10 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 13 Aug 2025 19:31:40 +0000 Subject: [PATCH 2/4] Add Changelog --- NEXT_CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index f4b5104ec..c4e69e1f5 100644 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -6,6 +6,8 @@ ### Bug Fixes +- [Breaking] `DatabricksError` now correctly exposes all Databricks error details types. This change is a breaking change for users who depending on the `ErrorDetail` class. The same information can be accessed from `ErrorDetails.errorInfo`. + ### Documentation ### Internal Changes From c383efefe946d4c574559706e35dbd892f95d28c Mon Sep 17 00:00:00 2001 From: Renaud Hartert Date: Thu, 14 Aug 2025 15:15:35 +0200 Subject: [PATCH 3/4] Update NEXT_CHANGELOG.md --- NEXT_CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index c4e69e1f5..0522e387f 100644 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -6,7 +6,7 @@ ### Bug Fixes -- [Breaking] `DatabricksError` now correctly exposes all Databricks error details types. This change is a breaking change for users who depending on the `ErrorDetail` class. The same information can be accessed from `ErrorDetails.errorInfo`. +- [Breaking] `DatabricksError` now correctly exposes all Databricks error details types. This change is a breaking change for users depending on the `ErrorDetail` class. The same information can be accessed from `ErrorDetails.errorInfo`. ### Documentation From ed4048a11e443246a3148156ad9547bf8fe5a25e Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Thu, 14 Aug 2025 19:21:07 +0000 Subject: [PATCH 4/4] Throw if unknown details type --- .../sdk/core/error/details/ErrorDetailsSerializer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsSerializer.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsSerializer.java index f8934a223..1f8f054a9 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsSerializer.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/error/details/ErrorDetailsSerializer.java @@ -116,6 +116,8 @@ private void serializeWithType( // Add the @type field. if (node instanceof ObjectNode) { ((ObjectNode) node).put("@type", type); + } else { + throw new IllegalArgumentException("Unknown detail type: " + node.getClass().getName()); } gen.writeObject(node);