flowable/flowable-engine · error · FlowableException

Error retrieving app engine info

Error message

Error retrieving app engine info

What it means

Thrown by HistoricTaskInstanceQuery.taskNameInIgnoreCase(Collection) when the passed collection is null. The query builder requires a concrete, non-null list of task names to build the SQL IN clause; a null would make it impossible to construct a valid query. This is an argument-validation guard at API entry.

Source

Thrown at modules/flowable-app-engine-rest/src/main/java/org/flowable/app/rest/service/api/management/AppEngineResource.java:66

            restApiInterceptor.accessAppManagementInfo();
        }
        
        EngineInfoResponse response = new EngineInfoResponse();

        try {
            AppEngine appEngine = AppEngines.getDefaultAppEngine();
            EngineInfo appEngineInfo = AppEngines.getAppEngineInfo(appEngine.getName());

            if (appEngineInfo != null) {
                response.setName(appEngineInfo.getName());
                response.setResourceUrl(appEngineInfo.getResourceUrl());
                response.setException(appEngineInfo.getException());
            } else {
                response.setName(appEngine.getName());
            }
            
        } catch (Exception e) {
            throw new FlowableException("Error retrieving app engine info", e);
        }

        response.setVersion(AppEngine.class.getPackage().getImplementationVersion());

        return response;
    }
}

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Check the collection for null before calling taskNameInIgnoreCase and skip setting the filter when absent.
  2. Default to an empty list at the source and only call taskNameInIgnoreCase when it is non-empty (note: an empty list also throws).
  3. Fix the upstream producer so the name list is populated instead of null.

Example fix

// before
query.taskNameInIgnoreCase(names); // names may be null

// after
if (names != null && !names.isEmpty()) {
    query.taskNameInIgnoreCase(names);
}
Defensive patterns

Strategy: validation

Validate before calling

if (names == null) { return Collections.emptyList(); }
if (names.isEmpty()) { return Collections.emptyList(); }
query.taskNameInIgnoreCase(names);

Type guard

static boolean isNonEmpty(Collection<String> c) { return c != null && !c.isEmpty(); }

Try / catch

try {
    query.taskNameInIgnoreCase(names);
} catch (FlowableIllegalArgumentException e) {
    LOG.warn("Invalid task name filter: {}", e.getMessage());
    return Collections.emptyList();
}

Prevention

When it happens

Trigger: Calling taskNameInIgnoreCase(null), typically when a nullable variable holding the name list is passed straight into the query builder.

Common situations: A method parameter or configuration value that resolves to null (empty optional, missing request parameter, unmapped JSON field) is forwarded directly to taskNameInIgnoreCase.

Related errors


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