{"record":{"id":"9bedde4c692f8ee4","repo":"flowable/flowable-engine","slug":"error-reading-json-value-configuration-for","errorCode":null,"errorMessage":"Error reading json value \" + configuration + \" for job \" + job","messagePattern":"Error reading json value \" \\+ configuration \\+ \" for job \" \\+ job","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerActivateProcessDefinitionHandler.java","lineNumber":46,"sourceCode":"public class TimerActivateProcessDefinitionHandler extends TimerChangeProcessDefinitionSuspensionStateJobHandler {\n\n    public static final String TYPE = \"activate-processdefinition\";\n\n    @Override\n    public String getType() {\n        return TYPE;\n    }\n\n    @Override\n    public void execute(JobEntity job, String configuration, VariableScope variableScope, CommandContext commandContext) {\n        ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext);\n        \n        boolean activateProcessInstances = false;\n        try {\n            JsonNode configNode = processEngineConfiguration.getObjectMapper().readTree(configuration);\n            activateProcessInstances = getIncludeProcessInstances(configNode);\n        } catch (Exception e) {\n            throw new FlowableException(\"Error reading json value \" + configuration + \" for job \" + job, e);\n        }\n\n        String processDefinitionId = job.getProcessDefinitionId();\n        ActivateProcessDefinitionCmd activateProcessDefinitionCmd = new ActivateProcessDefinitionCmd(processDefinitionId, null, activateProcessInstances, null, job.getTenantId());\n        activateProcessDefinitionCmd.execute(commandContext);\n    }\n\n}\n","sourceCodeStart":28,"sourceCodeEnd":55,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerActivateProcessDefinitionHandler.java#L28-L55","documentation":"Thrown by TimerActivateProcessDefinitionHandler.execute when the timer job's JSON configuration string cannot be parsed with the engine's ObjectMapper. The handler reads includeProcessInstances from the config JSON before running ActivateProcessDefinitionCmd.","triggerScenarios":"A timer-activation job whose configuration string is malformed JSON or missing expected fields, read via readTree(...) which throws and is wrapped in this FlowableException.","commonSituations":"Manual editing of ACT_RU_JOB CONFIGURATION_ column, upgrading between versions where the config JSON schema changed, or jobs created by a different Flowable version.","solutions":["Fix the job's CONFIGURATION_ value to be valid JSON (e.g. {\"includeProcessInstances\":true})","Delete and let the engine recreate the timer job (e.g. redeploy the process definition)","Inspect the causing exception (wrapped) to pinpoint the JSON parse failure"],"exampleFix":"// before\n-- UPDATE ACT_RU_JOB SET CONFIGURATION_ = 'includeProcessInstances=true' ...\n// after\n-- UPDATE ACT_RU_JOB SET CONFIGURATION_ = '{\"includeProcessInstances\":true}' ...","handlingStrategy":"try-catch","validationCode":"try { new ObjectMapper().readTree(configuration); } catch (Exception e) { /* repair CONFIGURATION_ before job fires */ }","typeGuard":null,"tryCatchPattern":"try { /* timer fires */ } catch (FlowableException e) { if (e.getMessage().startsWith(\"Error reading json value\")) { /* fix job configuration JSON or recreate job */ } else throw e; }","preventionTips":["Never hand-edit ACT_RU_JOB.CONFIGURATION_","Test JSON config schema across Flowable upgrades"],"tags":["flowable","timer","json","job-executor"],"backgroundTag":"json-parse-error","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}