diff --git a/standalone-metastore/metastore-rest-catalog/src/main/java/org/apache/iceberg/rest/HMSCatalogAdapter.java b/standalone-metastore/metastore-rest-catalog/src/main/java/org/apache/iceberg/rest/HMSCatalogAdapter.java index 73d23ae5daf0..98277404707d 100644 --- a/standalone-metastore/metastore-rest-catalog/src/main/java/org/apache/iceberg/rest/HMSCatalogAdapter.java +++ b/standalone-metastore/metastore-rest-catalog/src/main/java/org/apache/iceberg/rest/HMSCatalogAdapter.java @@ -20,10 +20,11 @@ package org.apache.iceberg.rest; import com.google.common.base.Preconditions; +import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.function.Consumer; +import javax.servlet.http.HttpServletResponse; import org.apache.iceberg.BaseTable; import org.apache.iceberg.BaseTransaction; import org.apache.iceberg.Table; @@ -45,7 +46,6 @@ import org.apache.iceberg.exceptions.NoSuchTableException; import org.apache.iceberg.exceptions.NoSuchViewException; import org.apache.iceberg.exceptions.NotAuthorizedException; -import org.apache.iceberg.exceptions.RESTException; import org.apache.iceberg.exceptions.UnprocessableEntityException; import org.apache.iceberg.exceptions.ValidationException; import org.apache.iceberg.relocated.com.google.common.base.Splitter; @@ -77,7 +77,7 @@ * Original @ RESTCatalogAdapter.java * Adaptor class to translate REST requests into {@link Catalog} API calls. */ -public class HMSCatalogAdapter implements RESTClient { +public class HMSCatalogAdapter { private static final Splitter SLASH = Splitter.on('/'); private static final Map, Integer> EXCEPTION_ERROR_CODES = @@ -493,7 +493,7 @@ T execute( String path, Map queryParams, Object body, - Consumer errorHandler) { + HttpServletResponse response) throws IOException { ErrorResponse.Builder errorBuilder = ErrorResponse.builder(); Pair> routeAndVars = Route.from(method, path); if (routeAndVars != null) { @@ -514,68 +514,9 @@ T execute( .withMessage(String.format("No route for request: %s %s", method, path)); } ErrorResponse error = errorBuilder.build(); - errorHandler.accept(error); - // if the error handler doesn't throw an exception, throw a generic one - throw new RESTException("Unhandled error: %s", error); - } - - @Override - public T delete( - String path, - Class responseType, - Map headers, - Consumer errorHandler) { - return execute(HTTPMethod.DELETE, path, null, null, errorHandler); - } - - @Override - public T delete( - String path, - Map queryParams, - Class responseType, - Map headers, - Consumer errorHandler) { - return execute(HTTPMethod.DELETE, path, queryParams, null, errorHandler); - } - - @Override - public T post( - String path, - RESTRequest body, - Class responseType, - Map headers, - Consumer errorHandler) { - return execute(HTTPMethod.POST, path, null, body, errorHandler); - } - - @Override - public T get( - String path, - Map queryParams, - Class responseType, - Map headers, - Consumer errorHandler) { - return execute(HTTPMethod.GET, path, queryParams, null, errorHandler); - } - - @Override - public void head(String path, Map headers, Consumer errorHandler) { - execute(HTTPMethod.HEAD, path, null, headers, errorHandler); - } - - @Override - public T postForm( - String path, - Map formData, - Class responseType, - Map headers, - Consumer errorHandler) { - return execute(HTTPMethod.POST, path, null, formData, errorHandler); - } - - @Override - public void close() { - // The caller is responsible for closing the underlying catalog backing this REST catalog. + response.setStatus(error.code()); + RESTObjectMapper.mapper().writeValue(response.getWriter(), error); + return null; } private static class BadResponseType extends RuntimeException { diff --git a/standalone-metastore/metastore-rest-catalog/src/main/java/org/apache/iceberg/rest/HMSCatalogServlet.java b/standalone-metastore/metastore-rest-catalog/src/main/java/org/apache/iceberg/rest/HMSCatalogServlet.java index 6140f40b2de5..f4416279b56f 100644 --- a/standalone-metastore/metastore-rest-catalog/src/main/java/org/apache/iceberg/rest/HMSCatalogServlet.java +++ b/standalone-metastore/metastore-rest-catalog/src/main/java/org/apache/iceberg/rest/HMSCatalogServlet.java @@ -20,10 +20,8 @@ package org.apache.iceberg.rest; import java.io.IOException; -import java.io.UncheckedIOException; import java.util.Map; import java.util.Optional; -import java.util.function.Consumer; import java.util.stream.Collectors; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -77,29 +75,17 @@ protected void service(HttpServletRequest request, HttpServletResponse response) context.path(), context.queryParams(), context.body(), - handle(response)); + response); if (responseBody != null) { RESTObjectMapper.mapper().writeValue(response.getWriter(), responseBody); } } catch (RuntimeException | IOException e) { - // should be a RESTException but not able to see them through dependencies LOG.error("Error processing REST request", e); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } } - private Consumer handle(HttpServletResponse response) { - return errorResponse -> { - response.setStatus(errorResponse.code()); - try { - RESTObjectMapper.mapper().writeValue(response.getWriter(), errorResponse); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - }; - } - public static class ServletRequestContext { private HTTPMethod method; private String path;