apereo/cas · error · Error
Failed to load configuration metadata
Error message
Failed to load configuration metadata: ${response.status} What it means
loadConfigurationMetadata() fetches the CAS actuator configuration-metadata endpoint and throws if the HTTP response is not OK, embedding the numeric status in the message. It surfaces endpoint failures (401/403/404/5xx) to the configuration-operations UI.
Solutions
- Expose the configuration-metadata actuator endpoint in CAS management endpoint configuration
- Ensure the browser user is authenticated/authorized for actuator endpoints
- Interpret the status in the message: 404 = endpoint disabled or wrong URL; 401/403 = permissions; 5xx = check CAS server logs
- Verify CasActuatorEndpoints.configurationMetadata() resolves to the correct CAS base URL
Example fix
// before
throw new Error(`Failed to load configuration metadata: ${response.status}`);
// after
if (!response.ok) {
console.warn(`Configuration metadata unavailable (HTTP ${response.status}); using local fallback`);
return;
} Defensive patterns
Strategy: try-catch
Validate before calling
const url = CasActuatorEndpoints.configurationMetadata();
if (!url) return; // endpoint not configured/enabled
const resp = await fetch(url, { credentials: 'include' });
const healthy = resp.ok; Type guard
const hasMetadataEndpoint = () => typeof CasActuatorEndpoints.configurationMetadata === 'function' && !!CasActuatorEndpoints.configurationMetadata();
Try / catch
try { await loadConfigurationMetadata(); } catch (e) { if (/Failed to load configuration metadata/.test(e.message)) { renderMetadataUnavailable(e.message); } else { throw e; } } Prevention
- Expose the configuration-metadata actuator endpoint in CAS properties
- Ensure actuator endpoints are reachable with the user's credentials
- Check HTTP status returned before parsing the response
When it happens
Trigger: initializeConfigurationOperations -> loadConfigurationMetadata when the actuator endpoint returns non-2xx: endpoint not exposed, unauthenticated request (401/403), wrong URL (404), or server error (5xx).
Common situations: configurationMetadata actuator endpoint not enabled/exposed in management endpoint config, security blocking actuator access, CAS server not fully started, wrong base URL in CasActuatorEndpoints.
Understand the failure class
Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.
Related errors
- Resource ID already exists in namespace .
- Unable to accept response status
- <policy status exception>
- No credentials can be extracted to authenticate the REST…
- Failed: status with message
AI-assisted analysis of apereo/cas@e7288fc434 (2026-09-08).
Data as JSON: /api/errors/d96bc7d52d985c2b.
Report an issue: GitHub.
Appendix: source
Thrown at support/cas-server-support-thymeleaf/src/main/resources/static/js/palantir-cas-config.js:528
propertyName: propertyName,
propertyValue: value,
propertySource: source.name
});
}
}
}
}
configurationTable.search("").draw();
mutableConfigurationTable.search("").draw();
}
async function loadConfigurationMetadata() {
if (!CasActuatorEndpoints.configurationMetadata() || CAS_CONFIG_METADATA.length === 0) {
return;
}
const response = await fetch(CasActuatorEndpoints.configurationMetadata());
if (!response.ok) {
throw new Error(`Failed to load configuration metadata: ${response.status}`);
}
CAS_CONFIG_METADATA = Object.values(await response.json());
}
async function populateConfigurationNameSelectOptions() {
const nameElem = $("#newConfigPropertyName")[0];
const ts = nameElem.tomselect;
const currentValue = ts.getValue();
const entries = [...new Map(
CAS_CONFIG_METADATA
.filter(entry => entry.id)
.map(entry => [
entry.id,
{
id: entry.id,
name: entry.id,
type: entry.type,View on GitHub (pinned to e7288fc434)