{"record":{"id":"fd58d794c5d6ea12","repo":"flowable/flowable-engine","slug":"only-one-of-timersonly-or-messagesonly-can-be","errorCode":null,"errorMessage":"Only one of 'timersOnly' or 'messagesOnly' can be provided.","messagePattern":"Only one of 'timersOnly' or 'messagesOnly' can be provided\\.","errorType":"http","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/DeadLetterJobCollectionResource.java","lineNumber":126,"sourceCode":"        if (allRequestParams.containsKey(\"caseDefinitionId\")) {\n            query.caseDefinitionId(allRequestParams.get(\"caseDefinitionId\"));\n        }\n        if (allRequestParams.containsKey(\"scopeDefinitionId\")) {\n            query.scopeDefinitionId(allRequestParams.get(\"scopeDefinitionId\"));\n            query.scopeType(ScopeTypes.CMMN);\n        }\n        if (allRequestParams.containsKey(\"elementId\")) {\n            query.elementId(allRequestParams.get(\"elementId\"));\n        }\n        if (allRequestParams.containsKey(\"elementName\")) {\n            query.elementName(allRequestParams.get(\"elementName\"));\n        }\n        if (allRequestParams.containsKey(\"executable\")) {\n            query.executable();\n        }\n        if (allRequestParams.containsKey(\"timersOnly\")) {\n            if (allRequestParams.containsKey(\"messagesOnly\")) {\n                throw new FlowableIllegalArgumentException(\"Only one of 'timersOnly' or 'messagesOnly' can be provided.\");\n            }\n            if (Boolean.parseBoolean(allRequestParams.get(\"timersOnly\"))) {\n                query.timers();\n            }\n        }\n        if (allRequestParams.containsKey(\"messagesOnly\") && Boolean.parseBoolean(allRequestParams.get(\"messagesOnly\"))) {\n            query.messages();\n        }\n        if (allRequestParams.containsKey(\"dueBefore\")) {\n            query.duedateLowerThan(RequestUtil.getDate(allRequestParams, \"dueBefore\"));\n        }\n        if (allRequestParams.containsKey(\"dueAfter\")) {\n            query.duedateHigherThan(RequestUtil.getDate(allRequestParams, \"dueAfter\"));\n        }\n        if (allRequestParams.containsKey(\"withException\") && Boolean.parseBoolean(allRequestParams.get(\"withException\"))) {\n            query.withException();\n        }\n        if (allRequestParams.containsKey(\"exceptionMessage\")) {","sourceCodeStart":108,"sourceCodeEnd":144,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/DeadLetterJobCollectionResource.java#L108-L144","documentation":"DeadLetterJobCollectionResource.getJobs rejects simultaneous 'timersOnly' and 'messagesOnly' request parameters, because the underlying DeadLetterJobQuery cannot filter both at once; it throws FlowableIllegalArgumentException.","triggerScenarios":"GET /cmmn-management/deadletter-jobs?timersOnly=true&messagesOnly=true — both filter parameters present in the request.","commonSituations":"Generic job-listing UIs that always append both flags; copy-pasted query strings combining filters; API clients building parameter maps without mutual-exclusion checks.","solutions":["Send only one of timersOnly or messagesOnly in the request.","If both job kinds are needed, issue two queries and merge the results client-side.","Omit both flags to get all dead letter jobs and filter by type afterwards."],"exampleFix":"// before\nGET /cmmn-management/deadletter-jobs?timersOnly=true&messagesOnly=true\n// after\nGET /cmmn-management/deadletter-jobs?timersOnly=true","handlingStrategy":"validation","validationCode":"const flags=[\"timersOnly\",\"messagesOnly\"].filter(f => params.get(f) !== null);\nif (flags.length > 1) throw new Error(\"Send at most one of timersOnly/messagesOnly\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never append both filter flags in generated query strings.","Model filters as a mutually exclusive option in client SDKs.","Filter by type client-side if you need both kinds."],"tags":["rest-api","query-parameters","validation"],"backgroundTag":"mutually-exclusive-options","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}