flowable/flowable-engine · warning · FlowableIllegalArgumentException

categoryLike is null

Error message

categoryLike is null

What it means

DecisionQueryImpl.decisionCategoryLike rejects a null categoryLike pattern with FlowableIllegalArgumentException. The like-pattern filter must be a concrete string; null is treated as a caller mistake and fails fast.

Source

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

    @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");
        }
        this.categoryNotEquals = categoryNotEquals;
        return this;
    }

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

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Only call decisionCategoryLike when a non-null pattern is available.
  2. Omit the call to match all categories.
  3. Provide a default pattern (e.g. "%.%" or a sensible wildcard) at the call site.

Example fix

// before
query.decisionCategoryLike("%" + userInput + "%"); // userInput null -> "%null%" or NPE risk

// after
if (userInput != null) {
    query.decisionCategoryLike("%" + userInput + "%");
}
Defensive patterns

Strategy: validation

Validate before calling

if (categoryLike != null) { query.decisionCategoryLike(categoryLike); }

Type guard

boolean hasPattern = (categoryLike instanceof String s) && !s.isBlank();

Try / catch

try {
    query.decisionCategoryLike(pattern);
} catch (FlowableIllegalArgumentException e) {
    // fall back to unfiltered query
}

Prevention

When it happens

Trigger: Calling decisionCategoryLike(pattern) where pattern is null, e.g. a wildcard expression built from user input that was absent.

Common situations: Search filters assembled from optional HTTP query params; a '%' wildcard string constructed from a null base value.

Related errors


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