{"record":{"id":"56a0d24eb4509dc7","repo":"theonedev/onedev","slug":"invalid-issue-number-0","errorCode":null,"errorMessage":"Invalid issue number: {0}","messagePattern":"Invalid issue number: (.+?)","errorType":"exception","errorClass":"NotAcceptableException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/web/page/project/issues/detail/IssueDetailPage.java","lineNumber":114,"sourceCode":"\t\n\tpublic IssueDetailPage(PageParameters params) {\n\t\tsuper(params);\n\t\t\n\t\tString issueNumberString = params.get(PARAM_ISSUE).toString();\n\t\tif (StringUtils.isBlank(issueNumberString)) {\n\t\t\tthrow new RestartResponseException(ProjectIssueListPage.class, \n\t\t\t\t\tProjectIssueListPage.paramsOf(getProject(), null, 0));\n\t\t}\n\t\t\n\t\tissueModel = new LoadableDetachableModel<Issue>() {\n\n\t\t\t@Override\n\t\t\tprotected Issue load() {\n\t\t\t\tLong issueNumber;\n\t\t\t\ttry {\n\t\t\t\t\tissueNumber = Long.valueOf(issueNumberString);\n\t\t\t\t} catch (NumberFormatException e) {\n\t\t\t\t\tthrow new NotAcceptableException(MessageFormat.format(_T(\"Invalid issue number: {0}\"), issueNumberString));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tIssue issue = issueService.find(getProject(), issueNumber);\n\t\t\t\tif (issue == null) { \n\t\t\t\t\tthrow new EntityNotFoundException(MessageFormat.format(_T(\"Unable to find issue #{0} in project {1}\"), issueNumber, getProject()));\n\t\t\t\t} else {\n\t\t\t\t\tissue = issue.resolveMovedTo();\n\t\t\t\t\tissueLinkService.loadDeepLinks(issue);\n\t\t\t\t\tif (!issue.getProject().equals(getProject())) \n\t\t\t\t\t\tthrow new RestartResponseException(getPageClass(), paramsOf(issue));\n\t\t\t\t\treturn issue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\t}\n\t\n\tpublic Issue getIssue() {","sourceCodeStart":96,"sourceCodeEnd":132,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/web/page/project/issues/detail/IssueDetailPage.java#L96-L132","documentation":"IssueDetailPage parses the issue number from the page parameters; when the string cannot be parsed as a Long it throws NotAcceptableException with this message. This happens before any database lookup, so it is purely a parameter-format validation error.","triggerScenarios":"Visiting an issue detail URL where the number segment is non-numeric, e.g. /~issues/abc instead of /~issues/42; malformed URL generation or path truncation producing a non-numeric issue number.","commonSituations":"Truncated/corrupted bookmarks; scripts interpolating a string value (e.g. an issue key like 'ABC-12') where a bare number is required; mistyped URLs.","solutions":["Use only the numeric issue number in the URL (e.g. /~issues/1234).","If generating links in code, pass Long.toString(issueNumber) rather than a textual issue key.","Check the URL for truncation or accidental non-numeric characters."],"exampleFix":"// before\nString url = \"/~issues/\" + issueKey; // \"ABC-12\"\n// after\nString url = \"/~issues/\" + issue.getNumber(); // \"12\"","handlingStrategy":"validation","validationCode":"if (!issueNumberStr.matches(\"\\\\d+\")) throw new IllegalArgumentException(\"Issue number must be numeric: \" + issueNumberStr);\nLong issueNumber = Long.valueOf(issueNumberStr);","typeGuard":"Long parseIssueNumber(String s) { try { return Long.valueOf(s); } catch (NumberFormatException e) { return null; } }","tryCatchPattern":"try { open(IssueDetailPage.paramsOf(number)); } catch (NumberFormatException e) { log.error(\"Non-numeric issue number in URL\"); }","preventionTips":["Generate issue URLs with IssueDetailPage.paramsOf(issue) instead of string concatenation.","Never embed textual issue keys (e.g. ABC-12) where a bare number is required.","Validate URL parameters numerically before use."],"tags":["wicket","issues","url-parameter","number-format"],"backgroundTag":"invalid-argument-format","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"}