flowable/flowable-engine · error · FlowableException
Error reading json value " + configuration + " for " + job
Error message
Error reading json value " + configuration + " for " + job
What it means
Thrown by TimerSuspendProcessDefinitionHandler.execute when the suspend-timer job's JSON configuration cannot be parsed. Mirrors the activate handler: it reads includeProcessInstances from the config JSON before running SuspendProcessDefinitionCmd.
Source
Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerSuspendProcessDefinitionHandler.java:46
public class TimerSuspendProcessDefinitionHandler extends TimerChangeProcessDefinitionSuspensionStateJobHandler {
public static final String TYPE = "suspend-processdefinition";
@Override
public String getType() {
return TYPE;
}
@Override
public void execute(JobEntity job, String configuration, VariableScope variableScope, CommandContext commandContext) {
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext);
boolean suspendProcessInstances = false;
try {
JsonNode configNode = processEngineConfiguration.getObjectMapper().readTree(configuration);
suspendProcessInstances = getIncludeProcessInstances(configNode);
} catch (Exception e) {
throw new FlowableException("Error reading json value " + configuration + " for " + job, e);
}
String processDefinitionId = job.getProcessDefinitionId();
SuspendProcessDefinitionCmd suspendProcessDefinitionCmd = new SuspendProcessDefinitionCmd(processDefinitionId, null, suspendProcessInstances, null, job.getTenantId());
suspendProcessDefinitionCmd.execute(commandContext);
}
}
View on GitHub (pinned to d6d39ce1c6)
Solutions
- Correct the CONFIGURATION_ JSON (e.g. {"includeProcessInstances":false})
- Recreate the timer job by redeploying the process definition
- Examine the wrapped cause for the exact JSON parse error
Example fix
// before
-- UPDATE ACT_RU_JOB SET CONFIGURATION_ = 'suspend: true' ...
// after
-- UPDATE ACT_RU_JOB SET CONFIGURATION_ = '{"includeProcessInstances":false}' ... Defensive patterns
Strategy: try-catch
Validate before calling
try { new ObjectMapper().readTree(configuration); } catch (Exception e) { /* repair job configuration JSON */ } Try / catch
try { /* timer fires */ } catch (FlowableException e) { if (e.getMessage().startsWith("Error reading json value")) { /* fix CONFIGURATION_ JSON or recreate job */ } else throw e; } Prevention
- Validate job configuration JSON whenever jobs are created or migrated
- Test suspension timers after Flowable version upgrades
When it happens
Trigger: A timer-suspension job whose CONFIGURATION_ string is malformed JSON or unreadable, throwing in readTree(...) and wrapped in this FlowableException.
Common situations: Manual DB edits to job configuration, schema changes across Flowable versions, or jobs created by a different engine version.
Understand the failure class
Background: JSON parse error: "Unexpected token" / "not valid JSON" / "failed to parse" — what JSON parsers are really complaining about — this error's family across 45 libraries.
Related errors
- Error reading json value " + configuration + " for job " + j
- Error reading app resource
- Error writing app model to json
- Cannot aggregate overview variable: ${varInstance}
- Cannot aggregate variable: ${varInstance}
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/ea0aa69591197ba8.
Report an issue: GitHub.