apache/iceberg · error · UnsupportedOperationException

Server does not support endpoint

Error message

Server does not support endpoint: %s

What it means

Endpoint.check validates that a requested REST endpoint is in the server's supported-endpoint set and throws UnsupportedOperationException otherwise. It is used by REST clients/servers to fail fast when the server does not implement a capability (e.g. views or OAuth endpoints).

Solutions

  1. Upgrade the REST catalog server to a version that implements the endpoint
  2. Configure the client to use only endpoints the server advertises, or skip the feature when unsupported
  3. Check server endpoint/configuration (e.g. supported endpoint filters) and add the missing endpoint
  4. Align client and server Iceberg versions

Example fix

// before
Endpoint.check(serverConfig.endpoints(), Endpoint.VIEW_REPLACE);
// after
if (serverConfig.endpoints().contains(Endpoint.VIEW_REPLACE)) {
  Endpoint.check(serverConfig.endpoints(), Endpoint.VIEW_REPLACE);
} else {
  throw new UnsupportedOperationException("Views are not supported by this server");
}
Defensive patterns

Strategy: type-guard

Validate before calling

boolean supported = serverEndpoints.contains(endpoint);

Type guard

boolean isSupported(Endpoint e, Set<Endpoint> supported) { return supported.contains(e); }

Try / catch

try { Endpoint.check(supported, endpoint); } catch (UnsupportedOperationException e) { /* degrade or fail fast with clear message */ }

Prevention

When it happens

Trigger: A client calls an operation whose Endpoint (path+method pair) is not contained in the server's advertised supportedEndpoints, e.g. invoking view APIs against a catalog server that only implements table endpoints.

Common situations: Client and server Iceberg versions mismatch (newer client hitting older server); server deployed with limited endpoint config (REST catalog endpoint filtering); proxy/gateway stripping endpoints; feature like view support not deployed on the target server.

Related errors


AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12). Data as JSON: /api/errors/07d984f79b7b63e0. Report an issue: GitHub.

Appendix: source

Thrown at core/src/main/java/org/apache/iceberg/rest/Endpoint.java:143

    List<String> elements = ENDPOINT_SPLITTER.splitToList(endpoint);
    Preconditions.checkArgument(
        elements.size() == 2,
        "Invalid endpoint (must consist of two elements separated by a single space): %s",
        endpoint);
    return create(elements.get(0), elements.get(1));
  }

  /**
   * Checks if the set of endpoints support the given {@link Endpoint}.
   *
   * @param supportedEndpoints The set of supported endpoints to check
   * @param endpoint The endpoint to check against the set of supported endpoints
   * @throws UnsupportedOperationException if the given {@link Endpoint} is not included in the set
   *     of endpoints.
   */
  public static void check(Set<Endpoint> supportedEndpoints, Endpoint endpoint) {
    if (!supportedEndpoints.contains(endpoint)) {
      throw new UnsupportedOperationException(
          String.format("Server does not support endpoint: %s", endpoint));
    }
  }

  /**
   * Checks if the set of endpoints support the given {@link Endpoint}.
   *
   * @param supportedEndpoints The set of supported endpoints to check
   * @param endpoint The endpoint to check against the set of supported endpoints
   * @param supplier The supplier throwing a {@link RuntimeException} if the given {@link Endpoint}
   *     is not included in the set of endpoints.
   */
  public static void check(
      Set<Endpoint> supportedEndpoints, Endpoint endpoint, Supplier<RuntimeException> supplier) {
    if (!supportedEndpoints.contains(endpoint)) {
      throw supplier.get();
    }
  }

View on GitHub (pinned to 86d9c8fc54)