{"record":{"id":"c71fb6882cce32d2","repo":"flowable/flowable-engine","slug":"only-one-of-timersonly-or-messagesonly-can-be-c71fb6","errorCode":null,"errorMessage":"Only one of 'timersOnly' or 'messagesOnly' can be provided.","messagePattern":"Only one of 'timersOnly' or 'messagesOnly' can be provided\\.","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/TimerJobCollectionResource.java","lineNumber":129,"sourceCode":"        }\n        if (allRequestParams.containsKey(\"elementId\")) {\n            query.elementId(allRequestParams.get(\"elementId\"));\n        }\n        if (allRequestParams.containsKey(\"handlerType\")) {\n            query.handlerType(allRequestParams.get(\"handlerType\"));\n        }\n        if (allRequestParams.containsKey(\"handlerTypes\")) {\n            query.handlerTypes(Arrays.asList(allRequestParams.get(\"handlerTypes\").split(\",\")));\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":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/TimerJobCollectionResource.java#L111-L147","documentation":"The job collection endpoint GET /management/jobs supports filtering to timer jobs (timersOnly) or message jobs (messagesOnly). Requesting both filters is contradictory — a job query cannot be timers-only and messages-only at once — so FlowableIllegalArgumentException is thrown.","triggerScenarios":"GET /management/jobs?timersOnly=true&messagesOnly=true — both request parameters present (regardless of their boolean values).","commonSituations":"Generic search UI forwarding all active filter checkboxes as parameters; proxy/gateway merging query params from multiple sources; copy-pasted URLs accumulating parameters.","solutions":["Send only one of timersOnly or messagesOnly per request.","If you need both timer and message jobs, make two requests without either filter or issue two filtered calls and merge results.","Strip mutually exclusive parameters in client code before issuing the request."],"exampleFix":"// before\nGET /management/jobs?timersOnly=true&messagesOnly=true\n// after\nGET /management/jobs?timersOnly=true","handlingStrategy":"validation","validationCode":"if (params.timersOnly != null && params.messagesOnly != null) throw new Error('timersOnly and messagesOnly are mutually exclusive');","typeGuard":null,"tryCatchPattern":"try { ... } catch (e) { if (e.status === 400 && /timersOnly/.test(e.message)) fixFiltersAndRetry(); else throw e; }","preventionTips":["Represent job type filter as a single enum ('timers'|'messages'|'all') in client code.","Do not forward all query params blindly; whitelist one-of filters."],"tags":["rest-api","invalid-argument","query-parameters","jobs"],"backgroundTag":"mutually-exclusive-flags","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}