static int mapExceptionToResponseCode()

in service/common/src/main/java/org/apache/polaris/service/exception/IcebergExceptionMapper.java [160:198]


  static int mapExceptionToResponseCode(RuntimeException rex) {
    for (Throwable t : ExceptionUtils.getThrowables(rex)) {
      // Cloud exceptions can be wrapped by the Iceberg SDK
      Optional<Integer> code = mapCloudExceptionToResponseCode(t);
      if (code.isPresent()) {
        return code.get();
      }
    }

    return switch (rex) {
      case NoSuchNamespaceException e -> Status.NOT_FOUND.getStatusCode();
      case NoSuchIcebergTableException e -> Status.NOT_FOUND.getStatusCode();
      case NoSuchTableException e -> Status.NOT_FOUND.getStatusCode();
      case NoSuchViewException e -> Status.NOT_FOUND.getStatusCode();
      case NotFoundException e -> Status.NOT_FOUND.getStatusCode();
      case FileIOUnknownHostException e -> Status.NOT_FOUND.getStatusCode();
      case AlreadyExistsException e -> Status.CONFLICT.getStatusCode();
      case CommitFailedException e -> Status.CONFLICT.getStatusCode();
      case UnprocessableEntityException e -> 422;
      case CherrypickAncestorCommitException e -> Status.BAD_REQUEST.getStatusCode();
      case CommitStateUnknownException e -> Status.BAD_REQUEST.getStatusCode();
      case DuplicateWAPCommitException e -> Status.BAD_REQUEST.getStatusCode();
      case ForbiddenException e -> Status.FORBIDDEN.getStatusCode();
      case jakarta.ws.rs.ForbiddenException e -> Status.FORBIDDEN.getStatusCode();
      case NotAuthorizedException e -> Status.UNAUTHORIZED.getStatusCode();
      case NamespaceNotEmptyException e -> Status.BAD_REQUEST.getStatusCode();
      case ValidationException e -> Status.BAD_REQUEST.getStatusCode();
      case ServiceUnavailableException e -> Status.SERVICE_UNAVAILABLE.getStatusCode();
      case RuntimeIOException e -> Status.SERVICE_UNAVAILABLE.getStatusCode();
      case ServiceFailureException e -> Status.SERVICE_UNAVAILABLE.getStatusCode();
      case CleanableFailure e -> Status.BAD_REQUEST.getStatusCode();
      case RESTException e -> Status.SERVICE_UNAVAILABLE.getStatusCode();
      case IllegalArgumentException e -> Status.BAD_REQUEST.getStatusCode();
      case UnsupportedOperationException e -> Status.NOT_ACCEPTABLE.getStatusCode();
      case WebApplicationException e -> e.getResponse().getStatus();
      case TimeoutException e -> Status.REQUEST_TIMEOUT.getStatusCode();
      default -> Status.INTERNAL_SERVER_ERROR.getStatusCode();
    };
  }