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
- Upgrade the REST catalog server to a version that implements the endpoint
- Configure the client to use only endpoints the server advertises, or skip the feature when unsupported
- Check server endpoint/configuration (e.g. supported endpoint filters) and add the missing endpoint
- 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
- Compare client/server Iceberg versions at startup
- Only call endpoints the server advertises
- Gate features on capability discovery
- Keep server endpoint config in sync with client usage
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
- The method start(Catalog, IcebergSinkConfig…
- Unrecognized update requirement. Cannot convert to json
- Altering a view is not supported by catalog:
- Altering a view is not supported by catalog
- Altering a view is not supported by catalog
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)