{"record":{"id":"e9ff11385d2fd588","repo":"SonarSource/sonarqube","slug":"unknown-severity-s","errorCode":null,"errorMessage":"Unknown severity: %s","messagePattern":"Unknown severity: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":400,"severity":"error","filePath":"server/sonar-webserver-api/src/main/java/org/sonar/server/qualityprofile/RuleActivation.java","lineNumber":53,"sourceCode":"@Immutable\npublic class RuleActivation {\n\n  private final String ruleUuid;\n  private final boolean reset;\n  private final String severity;\n  private final Map<SoftwareQuality, org.sonar.api.issue.impact.Severity> impactSeverities;\n  private final Boolean prioritizedRule;\n  private final Map<String, String> parameters = new HashMap<>();\n\n  private RuleActivation(String ruleUuid, boolean reset, @Nullable String severity, @Nullable Boolean prioritizedRule, @Nullable Map<String, String> parameters,\n    Map<SoftwareQuality, org.sonar.api.issue.impact.Severity> impactSeverities) {\n    this.ruleUuid = ruleUuid;\n    this.reset = reset;\n    this.severity = severity;\n    this.prioritizedRule = prioritizedRule;\n    this.impactSeverities = impactSeverities.isEmpty() ? Map.of() : new EnumMap<>(impactSeverities);\n    if (severity != null && !Severity.ALL.contains(severity)) {\n      throw new IllegalArgumentException(\"Unknown severity: \" + severity);\n    }\n    if (parameters != null) {\n      for (Map.Entry<String, String> entry : parameters.entrySet()) {\n        this.parameters.put(entry.getKey(), Strings.emptyToNull(entry.getValue()));\n      }\n    }\n  }\n\n  public static RuleActivation createReset(String ruleUuid) {\n    return new RuleActivation(ruleUuid, true, null, null, null, Map.of());\n  }\n\n  public static RuleActivation create(String ruleUuid, @Nullable String severity, @Nullable Boolean prioritizedRule,\n    @Nullable Map<String, String> parameters) {\n    return new RuleActivation(ruleUuid, false, severity, prioritizedRule, parameters, Map.of());\n  }\n\n  public static RuleActivation create(String ruleUuid, @Nullable String severity, @Nullable Map<SoftwareQuality,","sourceCodeStart":35,"sourceCodeEnd":71,"githubUrl":"https://github.com/SonarSource/sonarqube/blob/184c821202192afc1c599fc912d0889b69fffa53/server/sonar-webserver-api/src/main/java/org/sonar/server/qualityprofile/RuleActivation.java#L35-L71","documentation":"RuleActivation's constructor validates that an optional severity string is one of the values in Severity.ALL (INFO, MINOR, MAJOR, CRITICAL, BLOCKER) and throws IllegalArgumentException otherwise. It guards against malformed severity values when activating/deactivating a rule in a quality profile.","triggerScenarios":"Constructing new RuleActivation(...) with a severity string that is null-checkable but not in Severity.ALL — e.g. arbitrary user input, lowercase 'major', legacy values like 'INFO ' with whitespace, or API payloads with invalid severity.","commonSituations":"Quality-profile activation requests built from unvalidated request parameters; clients sending custom severities; case sensitivity mistakes ('critical' vs 'CRITICAL').","solutions":["Pass only Severity.ALL values (INFO, MINOR, MAJOR, CRITICAL, BLOCKER) or null for default severity","Normalize/validate input with Severity.ALL.contains(severity) before constructing RuleActivation","Use the Severity.ALL constant as the source of truth instead of hardcoding strings"],"exampleFix":"// before\nnew RuleActivation(ruleUuid, reset, \"major\", prioritizedRule, impactSeverities, parameters);\n// after\nString severity = request.severity();\nif (severity != null && !Severity.ALL.contains(severity)) {\n  throw new BadRequestException(\"Invalid severity: \" + severity);\n}\nnew RuleActivation(ruleUuid, reset, severity.toUpperCase(Locale.ROOT), prioritizedRule, impactSeverities, parameters);","handlingStrategy":"validation","validationCode":"if (severity != null && !Severity.ALL.contains(severity)) {\n  throw new BadRequestException(\"severity must be one of \" + Severity.ALL + \", got: \" + severity);\n}","typeGuard":"String normalizeSeverity(String s) {\n  if (s == null) return null;\n  String upper = s.trim().toUpperCase(Locale.ROOT);\n  return Severity.ALL.contains(upper) ? upper : null; // null signals invalid\n}","tryCatchPattern":"try {\n  new RuleActivation(ruleUuid, reset, severity, prioritizedRule, impacts, params);\n} catch (IllegalArgumentException e) {\n  if (!e.getMessage().startsWith(\"Unknown severity\")) throw e;\n  // reject request with 400 and list valid severities\n}","preventionTips":["Always validate user-supplied severity against Severity.ALL before construction","Normalize casing/trimming of severity input","Let clients discover valid values from the API metadata rather than guessing strings"],"tags":["java","quality-profile","validation","sonarqube"],"backgroundTag":"invalid-enum-value","analyzedSha":"184c821202192afc1c599fc912d0889b69fffa53","analyzedAt":"2026-09-09T12:23:51.573Z","contentChangedAt":"2026-09-09T12:23:51.573Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}