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

  1. Correct the CONFIGURATION_ JSON (e.g. {"includeProcessInstances":false})
  2. Recreate the timer job by redeploying the process definition
  3. 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

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


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/ea0aa69591197ba8. Report an issue: GitHub.