flowable/flowable-engine · warning · FlowableIllegalArgumentException

category is null

Error message

category is null

What it means

DecisionQueryImpl.decisionCategory rejects a null category argument with FlowableIllegalArgumentException. Query criteria setters in Flowable validate non-null inputs up front so the failure surfaces at query construction rather than as a database error at execution time.

Source

Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/DecisionQueryImpl.java:88

        super(commandExecutor);
    }

    @Override
    public DecisionQueryImpl decisionId(String decisionId) {
        this.id = decisionId;
        return this;
    }

    @Override
    public DmnDecisionQuery decisionIds(Set<String> decisionIds) {
        this.ids = decisionIds;
        return this;
    }

    @Override
    public DecisionQueryImpl decisionCategory(String category) {
        if (category == null) {
            throw new FlowableIllegalArgumentException("category is null");
        }
        this.category = category;
        return this;
    }

    @Override
    public DecisionQueryImpl decisionCategoryLike(String categoryLike) {
        if (categoryLike == null) {
            throw new FlowableIllegalArgumentException("categoryLike is null");
        }
        this.categoryLike = categoryLike;
        return this;
    }

    @Override
    public DecisionQueryImpl decisionCategoryNotEquals(String categoryNotEquals) {
        if (categoryNotEquals == null) {
            throw new FlowableIllegalArgumentException("categoryNotEquals is null");

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Guard the caller: only call decisionCategory when the value is non-null.
  2. If 'any category' is intended, simply omit the decisionCategory call instead of passing null.
  3. Default the value at the source (e.g. Optional.ofNullable(category).orElse(DEFAULT_CATEGORY)).

Example fix

// before
query.decisionCategory(request.getCategory()); // may be null

// after
if (request.getCategory() != null) {
    query.decisionCategory(request.getCategory());
}
Defensive patterns

Strategy: validation

Validate before calling

if (category != null) { query.decisionCategory(category); }

Type guard

boolean hasCategory = (category != null && !category.isBlank());

Try / catch

try {
    query.decisionCategory(category);
} catch (FlowableIllegalArgumentException e) {
    LOGGER.warn("decisionCategory called with null; skipping filter");
}

Prevention

When it happens

Trigger: Calling decisionRepositoryService.createDecisionQuery().decisionCategory(variableThatIsNull).

Common situations: Category value read from a request parameter, config, or upstream record that turned out to be null.

Related errors


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