{"record":{"id":"50d3c1d015fd4cde","repo":"theonedev/onedev","slug":"invalid-field-fieldname","errorCode":null,"errorMessage":"Invalid field: \" + fieldName","messagePattern":"Invalid field: \" \\+ fieldName","errorType":"exception","errorClass":"ExplicitException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/job/match/JobMatch.java","lineNumber":142,"sourceCode":"\t\t\t@Override\n\t\t\tpublic Criteria<io.onedev.server.job.match.JobMatchContext> visitNotCriteria(JobMatchParser.NotCriteriaContext ctx) {\n\t\t\t\treturn new NotCriteria<>(visit(ctx.criteria()));\n\t\t\t}\n\n\t\t}.visit(JobMatchContext.criteria());\n\t\t\n\t\treturn new JobMatch(criteria);\n\t}\n\t\n\tpublic static void checkField(String fieldName, boolean withProjectCriteria, boolean withJobCriteria) {\n\t\tif (fieldName.equals(Build.NAME_PROJECT)) {\n\t\t\tif (!withProjectCriteria)\n\t\t\t\tthrow new ExplicitException(\"Project criteria is not supported here\");\n\t\t} else if (fieldName.equals(Build.NAME_JOB)) {\n\t\t\tif (!withJobCriteria)\n\t\t\t\tthrow new ExplicitException(\"Job criteria is not supported here\");\n\t\t} else {\n\t\t\tthrow new ExplicitException(\"Invalid field: \" + fieldName);\n\t\t}\n\t}\n\n\t@Override\n\tpublic boolean matches(JobMatchContext context) {\n\t\treturn criteria.matches(context);\n\t}\n\n\t@Override\n\tpublic Predicate getPredicate(@Nullable ProjectScope projectScope, CriteriaQuery<?> query, From<JobMatchContext, JobMatchContext> from,\n\t\t\tCriteriaBuilder builder) {\n\t\tthrow new UnsupportedOperationException();\n\t}\n\t\t\n\t@Override\n\tpublic void onMoveProject(String oldPath, String newPath) {\n\t\tcriteria.onMoveProject(oldPath, newPath);\n\t}","sourceCodeStart":124,"sourceCodeEnd":160,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/job/match/JobMatch.java#L124-L160","documentation":"JobMatch.checkField only accepts two field names: Build.NAME_PROJECT and Build.NAME_JOB. Any other field name in a job criteria clause throws 'Invalid field: <fieldName>', an ExplicitException signaling the criteria references a field that does not exist for job matching.","triggerScenarios":"A criteria clause of the form <field> <operator> <value> is parsed (visitFieldOperatorValueCriteria) where <field> is neither 'Project' nor 'Job'.","commonSituations":"Typo in a query field name, using fields valid for issue/build queries (e.g. 'Branch', 'Status') in a job query, or an old query written for a previous schema.","solutions":["Correct the field name in the criteria to 'Project' or 'Job'.","Remove the offending criteria clause.","Check OneDev documentation for the supported job query fields."],"exampleFix":"// before\ncriteria: \"Branch == master\"\n// after\ncriteria: \"Job == \\\"my job\\\"\"","handlingStrategy":"validation","validationCode":"Set<String> allowed = Set.of(Build.NAME_PROJECT, Build.NAME_JOB);\nif (!allowed.contains(fieldName)) throw new IllegalArgumentException(\"Invalid field: \" + fieldName);","typeGuard":"boolean isValidJobField(String f) { return f.equals(Build.NAME_PROJECT) || f.equals(Build.NAME_JOB); }","tryCatchPattern":"try { JobMatch.checkField(fieldName, true, true); } catch (ExplicitException e) { /* show user invalid-field message */ }","preventionTips":["Use autocomplete from the query editor","Keep a list of valid fields handy","Validate saved queries after OneDev upgrades"],"tags":["criteria","query-validation","onedev"],"backgroundTag":"invalid-argument-value","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}