theonedev/onedev · error · NotAcceptableException
Unexpected setting: {0}
Error message
Unexpected setting: {0} What it means
ContributedProjectSettingPage resolves the 'setting' URL parameter to a project setting class contributed via ProjectConfigurations; when the given settingName matches no contributor it throws NotAcceptableException. It guards against unknown or misspelled setting page names.
Source
Thrown at server-core/src/main/java/io/onedev/server/web/page/project/setting/pluginsettings/ContributedProjectSettingPage.java:65
public ContributedProjectSettingPage(PageParameters params) {
super(params);
String settingName = params.get(PARAM_SETTING).toString();
for (ProjectSettingContribution contribution:
OneDev.getExtensions(ProjectSettingContribution.class)) {
for (Class<? extends ContributedProjectSetting> each: contribution.getSettingClasses()) {
if (getSettingName(each).equals(settingName)) {
settingClass = each;
break;
}
}
if (settingClass != null)
break;
}
if (settingClass == null)
throw new NotAcceptableException(MessageFormat.format(_T("Unexpected setting: {0}"), settingName));
}
@Override
protected void onInitialize() {
super.onInitialize();
String help = EditableUtils.getDescription(settingClass);
if (help != null)
add(new Label("help", help).setEscapeModelStrings(false));
else
add(new WebMarkupContainer("help").setVisible(false));
Form<?> form = new Form<Void>("form") {
@Override
protected void onSubmit() {
super.onSubmit();
View on GitHub (pinned to d44925c47c)
Solutions
- Use the project settings menu to navigate to the desired setting page rather than a hand-written URL.
- Check the exact setting name registered by the contributing plugin and correct the URL parameter.
- Update stale bookmarks/links after OneDev upgrades; reinstall the plugin that contributed the setting.
Example fix
// before open(projectUrl + "/~settings/plugin?setting=MyOldSettingName"); // after open(projectUrl + "/~settings/plugin?setting=" + ProjectConfigurations.SETTING_NAME);
Defensive patterns
Strategy: validation
Validate before calling
boolean known = OneDev.getExtensions(ProjectSettingContributor.class).stream()
.anyMatch(c -> c.getSettingNames().contains(settingName));
if (!known) throw new IllegalArgumentException("Unknown project setting: " + settingName); Type guard
Class<? extends ProjectSetting> resolveSetting(String name) { /* return null when no contributor matches */ } Try / catch
try { openPluginSetting(name); } catch (NotAcceptableException e) { openSettingsMenuInstead(); } Prevention
- Generate setting URLs from contributor constants, not hand-typed names.
- Re-check plugin-contributed setting URLs after upgrades or plugin removal.
- Use the settings UI navigation rather than constructing plugin URLs manually.
When it happens
Trigger: Navigating to the project settings plugin page with a 'setting' parameter that no extension contributes, e.g. a renamed, removed, or typo'd setting name; stale links after an upgrade removed/renamed a contributed setting.
Common situations: Bookmarks to a setting page that was renamed between OneDev versions; hand-built URLs to plugin settings; third-party plugin uninstalled so its setting name no longer resolves.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- Unexpected setting: {0}
- Base resource mapper should be used
- Resource class not found: ${className}
- Invalid issue number: {0}
- Invalid pack ID: {0}
AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06).
Data as JSON: /api/errors/c7af8fe28356b081.
Report an issue: GitHub.