{"record":{"id":"63f7ae950eedd3bb","repo":"quarkusio/quarkus","slug":"description-for-job-identity-is-too-long-len","errorCode":null,"errorMessage":"Description for job '{identity}' is too long: {length} characters (max 250)","messagePattern":"Description for job '(.+?)' is too long: (.+?) characters \\(max 250\\)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/quartz/runtime/src/main/java/io/quarkus/quartz/runtime/QuartzSchedulerImpl.java","lineNumber":677,"sourceCode":"    }\n\n    private void putExtensionConfigurationProperties(Properties props, String prefix,\n            Map<String, QuartzExtensionPointConfig> configs) {\n        configs.forEach((configKey, config) -> {\n            putExtensionConfigurationProperties(props, String.format(\"%s.%s\", prefix, configKey), config);\n        });\n    }\n\n    private void putExtensionConfigurationProperties(Properties props, String prefix, QuartzExtensionPointConfig config) {\n        props.put(String.format(\"%s.class\", prefix), config.clazz());\n        config.properties().forEach((propName, propValue) -> {\n            props.put(String.format(\"%s.%s\", prefix, propName), propValue);\n        });\n    }\n\n    private static void validateDescriptionLength(String identity, String description) {\n        if (description != null && description.length() > Scheduled.DESCRIPTION_MAX_LENGTH) {\n            throw new IllegalArgumentException(\n                    \"Description for job '\" + identity + \"' is too long: \" + description.length()\n                            + \" characters (max \" + Scheduled.DESCRIPTION_MAX_LENGTH + \")\");\n        }\n    }\n\n    private JobBuilder createJobBuilder(String identity, String invokerClassName, boolean noncurrent, String description) {\n        Class<? extends Job> jobClass = noncurrent ? NonconcurrentInvokerJob.class\n                : InvokerJob.class;\n        JobBuilder jobBuilder = JobBuilder.newJob(jobClass)\n                // new JobKey(identity, \"io.quarkus.scheduler.Scheduler\")\n                .withIdentity(identity, Scheduler.class.getName())\n                // this info is redundant but keep it for backward compatibility\n                .usingJobData(INVOKER_KEY, invokerClassName)\n                .requestRecovery();\n        if (description != null) {\n            jobBuilder.withDescription(description);\n        }\n        return jobBuilder;","sourceCodeStart":659,"sourceCodeEnd":695,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/quartz/runtime/src/main/java/io/quarkus/quartz/runtime/QuartzSchedulerImpl.java#L659-L695","documentation":"Quarkus validates that a job's description does not exceed Scheduled.DESCRIPTION_MAX_LENGTH (250 characters) and throws this IllegalArgumentException from validateDescriptionLength when it does. The validation runs when creating job definitions/triggers (both static @Scheduled descriptions and programmatic newJob().setDescription()), keeping Quartz metadata within limits imposed by the Scheduler API contract.","triggerScenarios":"Declaring a @Scheduled job with a description longer than 250 characters, or calling QuartzJobDefinition.setDescription(...) with a string over 250 characters during programmatic job creation.","commonSituations":"Using a full documentation paragraph as the job description; loading descriptions from config or i18n bundles without length checks; descriptions copied from Javadoc.","solutions":["Shorten the description to 250 characters or fewer","Truncate programmatically before setting: description.length() > 250 ? description.substring(0, 250) : description","Move long documentation into a doc comment or external docs; keep the description as a short summary","Add a startup/config validation for description sources (config properties, DB) that feed descriptions"],"exampleFix":"// before\njobDef.setDescription(longMarkdownDocs); // IllegalArgumentException\n// after\nString desc = longMarkdownDocs;\nif (desc != null && desc.length() > 250) {\n    desc = desc.substring(0, 250);\n}\njobDef.setDescription(desc);","handlingStrategy":"validation","validationCode":"static String safeDescription(String d) {\n    return (d == null || d.length() <= 250) ? d : d.substring(0, 250);\n}","typeGuard":"boolean isValidDescription(String d) {\n    return d == null || d.length() <= 250;\n}","tryCatchPattern":"try {\n    jobDef.setDescription(description);\n} catch (IllegalArgumentException e) {\n    jobDef.setDescription(description.substring(0, 250));\n}","preventionTips":["Enforce a 250-char limit at the config/source layer feeding descriptions","Truncate before calling setDescription()","Keep job descriptions as short summaries, not documentation"],"tags":["quartz","scheduler","validation","description-length"],"backgroundTag":"schema-validation-failed","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}