flowable/flowable-engine · error · FlowableException

Error reading json value " + configuration + " for job " + j

Error message

Error reading json value " + configuration + " for job " + job

What it means

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.

Source

Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerActivateProcessDefinitionHandler.java:46

public class TimerActivateProcessDefinitionHandler extends TimerChangeProcessDefinitionSuspensionStateJobHandler {

    public static final String TYPE = "activate-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 activateProcessInstances = false;
        try {
            JsonNode configNode = processEngineConfiguration.getObjectMapper().readTree(configuration);
            activateProcessInstances = getIncludeProcessInstances(configNode);
        } catch (Exception e) {
            throw new FlowableException("Error reading json value " + configuration + " for job " + job, e);
        }

        String processDefinitionId = job.getProcessDefinitionId();
        ActivateProcessDefinitionCmd activateProcessDefinitionCmd = new ActivateProcessDefinitionCmd(processDefinitionId, null, activateProcessInstances, null, job.getTenantId());
        activateProcessDefinitionCmd.execute(commandContext);
    }

}

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Fix the job's CONFIGURATION_ value to be valid JSON (e.g. {"includeProcessInstances":true})
  2. Delete and let the engine recreate the timer job (e.g. redeploy the process definition)
  3. Inspect the causing exception (wrapped) to pinpoint the JSON parse failure

Example fix

// before
-- UPDATE ACT_RU_JOB SET CONFIGURATION_ = 'includeProcessInstances=true' ...
// after
-- UPDATE ACT_RU_JOB SET CONFIGURATION_ = '{"includeProcessInstances":true}' ...
Defensive patterns

Strategy: try-catch

Validate before calling

try { new ObjectMapper().readTree(configuration); } catch (Exception e) { /* repair CONFIGURATION_ before job fires */ }

Try / catch

try { /* timer fires */ } catch (FlowableException e) { if (e.getMessage().startsWith("Error reading json value")) { /* fix job configuration JSON or recreate job */ } else throw e; }

Prevention

When it happens

Trigger: 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.

Common situations: 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.

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/9bedde4c692f8ee4. Report an issue: GitHub.