{"record":{"id":"50d35098d015e6da","repo":"theonedev/onedev","slug":"invalid-parameter-count-for-executable-executable","errorCode":null,"errorMessage":"Invalid parameter count for executable {executable}: expected {expected} parameters but got {actual}.","messagePattern":"Invalid parameter count for executable (.+?): expected (.+?) parameters but got (.+?)\\.","errorType":"validation","errorClass":"ValidationException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/org/hibernate/validator/internal/engine/ValidatorImpl.java","lineNumber":901,"sourceCode":"\t\treturn validationContext.getFailingConstraints();\n\t}\n\n\tprivate <T> void validateParametersInContext(ExecutableValidationContext<T> validationContext,\n\t\t\tObject[] parameterValues,\n\t\t\tValidationOrder validationOrder) {\n\t\tBeanMetaData<T> beanMetaData = validationContext.getRootBeanMetaData();\n\n\t\tOptional<ExecutableMetaData> executableMetaDataOptional = validationContext.getExecutableMetaData();\n\n\t\tif ( !executableMetaDataOptional.isPresent() ) {\n\t\t\t// the method is unconstrained\n\t\t\treturn;\n\t\t}\n\n\t\tExecutableMetaData executableMetaData = executableMetaDataOptional.get();\n\n\t\tif ( parameterValues.length != executableMetaData.getParameterTypes().length ) {\n\t\t\tthrow LOG.getInvalidParameterCountForExecutableException(\n\t\t\t\t\tExecutableHelper.getExecutableAsString(\n\t\t\t\t\t\t\texecutableMetaData.getType().toString() + \"#\" + executableMetaData.getName(),\n\t\t\t\t\t\t\texecutableMetaData.getParameterTypes()\n\t\t\t\t\t),\n\t\t\t\t\texecutableMetaData.getParameterTypes().length,\n\t\t\t\t\tparameterValues.length\n\t\t\t);\n\t\t}\n\n\t\tif ( beanMetaData.isDefaultGroupSequenceRedefined() ) {\n\t\t\tvalidationOrder.assertDefaultGroupSequenceIsExpandable(\n\t\t\t\t\tbeanMetaData.getDefaultGroupSequence(\n\t\t\t\t\t\t\tvalidationContext.getRootBean()\n\t\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\t// process first single groups","sourceCodeStart":883,"sourceCodeEnd":919,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/org/hibernate/validator/internal/engine/ValidatorImpl.java#L883-L919","documentation":"Thrown by forExecutables().validateParameters()/validateReturnValue() when the caller passes a different number of argument values than the validated executable (method or constructor) declares. The validator compares parameterValues.length against the executable's parameter type count and fails fast rather than validating a mismatched invocation.","triggerScenarios":"Calling Validator.forExecutables(...).validateParameters(object, method, new Object[]{...}) with an array whose length differs from method.getParameterTypes().length — e.g. after refactoring the method signature, or passing null/default args arrays for varargs or inherited methods resolved via the wrong Class object.","commonSituations":"Signature changes without updating validation harness code, resolving a Method from a superclass but passing parameters typed for a subclass overload, generic/varargs methods where the caller miscounts expanded varargs.","solutions":["Pass exactly executable.getParameterTypes().length values (use null placeholders for arguments you don't want validated).","Update hardcoded parameter arrays after any method signature change.","Resolve the Method object from the same class the parameter values were written for."],"exampleFix":"// before\nvalidator.forExecutables().validateParameters(service, method, new Object[]{name});\n\n// after\nObject[] args = new Object[method.getParameterCount()];\nargs[0] = name;\nvalidator.forExecutables().validateParameters(service, method, args);","handlingStrategy":"validation","validationCode":"if (args.length != method.getParameterCount()) {\n    throw new IllegalArgumentException(\"expected \" + method.getParameterCount()\n        + \" parameters but got \" + args.length);\n}","typeGuard":"null","tryCatchPattern":"try {\n    validator.forExecutables().validateParameters(target, method, args);\n} catch (ValidationException e) {\n    if (e.getMessage().contains(\"Invalid parameter count\")) {\n        // rebuild args from method.getParameterTypes() with null placeholders\n    } else throw e;\n}","preventionTips":["Always size the args array from executable.getParameterCount()/getParameterTypes().","Fill unknown arguments with null placeholders instead of omitting them.","Re-derive Method objects after signature refactors instead of caching stale ones."],"tags":["validation","executable-validation","reflection"],"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-14T05:17:10.506Z"}