{"record":{"id":"9a681bde7f46738a","repo":"theonedev/onedev","slug":"missing-job-parameter","errorCode":null,"errorMessage":"Missing job parameter (","messagePattern":"Missing job parameter \\(","errorType":"validation","errorClass":"ValidationException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/buildspec/param/ParamUtils.java","lineNumber":99,"sourceCode":"\t\t\t\tfor (String each: paramValue) {\n\t\t\t\t\tif (each.startsWith(SecretInput.LITERAL_VALUE_PREFIX))\n\t\t\t\t\t\tdisplayValue.add(SecretInput.MASK);\n\t\t\t\t\telse\n\t\t\t\t\t\tdisplayValue.add(each);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdisplayValue = paramValue;\n\t\t\t}\n\t\t\tString errorMessage = String.format(\"Error validating param value (param: %s, value: %s, error message: %s\", \n\t\t\t\t\tparamName, displayValue, e.getMessage() != null? e.getMessage(): e.getClass());\n\t\t\tthrow new ValidationException(errorMessage);\n\t\t}\n\t}\n\n\tprivate static void validateParamNames(Collection<String> paramSpecNames, Collection<String> paramNames) {\n\t\tfor (String paramSpecName: paramSpecNames) {\n\t\t\tif (!paramNames.contains(paramSpecName))\n\t\t\t\tthrow new ValidationException(\"Missing job parameter (\" + paramSpecName + \")\");\n\t\t}\n\t\tfor (String paramName: paramNames) {\n\t\t\tif (!paramSpecNames.contains(paramName))\n\t\t\t\tthrow new ValidationException(\"Unknown job parameter (\" + paramName + \")\");\n\t\t}\n\t}\n\t\n\tpublic static void validateParamMap(List<ParamSpec> paramSpecs, Map<String, List<String>> paramMap) {\n\t\tMap<String, ParamSpec> paramSpecMap = ParamUtils.getParamSpecMap(paramSpecs);\n\t\tvalidateParamNames(paramSpecMap.keySet(), paramMap.keySet());\n\t\tfor (Map.Entry<String, List<String>> entry: paramMap.entrySet()) {\n\t\t\tif (entry.getValue() != null) {\n\t\t\t\tParamSpec paramSpec = Preconditions.checkNotNull(paramSpecMap.get(entry.getKey()));\n\t\t\t\tvalidateParamValue(paramSpec, entry.getKey(), entry.getValue());\n\t\t\t}\n\t\t}\n\t}\n\t","sourceCodeStart":81,"sourceCodeEnd":117,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/buildspec/param/ParamUtils.java#L81-L117","documentation":"Thrown by ParamUtils.validateParamNames when a parameter declared in the job's param specs has no corresponding entry in the supplied parameter names (map or matrix). Every defined job parameter must be provided a value; a missing one would leave the job runnable configuration incomplete.","triggerScenarios":"Calling validateParamMatrix or validateParamMap where paramSpecs contains a name absent from the param names collection — e.g. job defines param 'version' but the param map/matrix only supplies 'os'.","commonSituations":"Adding a new parameter to the job but forgetting to add it to run/trigger param values; renaming a parameter in the spec without updating callers (job dependencies, scheduled crons, triggers passing params).","solutions":["Add a value entry for the missing parameter (name in the message is inside parentheses)","Remove the parameter from the job spec if it is no longer needed","Update job dependencies/triggers that pass params to include the new parameter"],"exampleFix":"// before: params supplied: os only; spec has os, version\nparams: {os: ubuntu}\n// after\nparams: {os: ubuntu, version: \"1.0\"}","handlingStrategy":"validation","validationCode":"Set<String> specNames = paramSpecs.stream().map(ParamSpec::getName).collect(Collectors.toSet());\nSet<String> given = paramMap.keySet();\nSet<String> missing = new HashSet<>(specNames); missing.removeAll(given);\nif (!missing.isEmpty()) throw new IllegalArgumentException(\"missing params: \" + missing);","typeGuard":null,"tryCatchPattern":"try { ParamUtils.validateParamMap(specs, paramMap); } catch (ValidationException e) { /* extract 'Missing job parameter (name)' and add entry */ }","preventionTips":["Whenever a param is added to a job spec, update all triggers/dependents that supply params","Build param maps from the spec's param list to ensure completeness","Review job dependency configs after spec edits"],"tags":["validation","params","buildspec"],"backgroundTag":"missing-required-argument","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}