flowable/flowable-engine · error · FlowableException

HitPolicy violated; no output values present.

Error message

HitPolicy %s violated; no output values present.

What it means

HitPolicyPriority.compare implements the comparator for PRIORITY hit policy, comparing rule results by their ranked output values. When neither result exposes comparable output values, strict mode throws FlowableException('HitPolicy PRIORITY violated; no output values present.') and lenient mode records a validation message and falls back to the first valid result.

Solutions

  1. Configure the priority output column and its ordered value list so outputs can be ranked
  2. Ensure matched rules actually emit a priority-ranked output value
  3. Check the audit container message identifying which comparisons lacked output values and fix those rows
  4. Consider hit policy FIRST if ranking is not actually needed

Example fix

// before (priority output not declared in table)
<hitPolicy>PRIORITY</hitPolicy> <!-- no priority output column -->
// after
<hitPolicy>PRIORITY</hitPolicy>
<output id="priorityOutput" name="priority"/> <!-- with ordered values configured -->
Defensive patterns

Strategy: validation

Validate before calling

// ensure priority output column exists and matched rules produce ranked values
if (table.getOutputs().stream().noneMatch(o -> o.isPriority())) throw new IllegalStateException("PRIORITY hit policy requires a priority output");

Try / catch

try { decisionTable.execute(input); } catch (FlowableException e) { if (e.getMessage().contains("no output values present")) { /* lenient mode already falls back; otherwise fix outputs */ } throw e; }

Prevention

When it happens

Trigger: Comparing two rule executions under hit policy PRIORITY whose output values list is empty (no output values produced), so the priority ordering cannot be computed.

Common situations: Priority strings/outputs missing from the decision table or not listed in the ordered priority values; output expressions evaluating to null; DMN model exported without priority output configuration.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


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

Appendix: source

Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/hitpolicy/HitPolicyPriority.java:64

            @SuppressWarnings("unchecked")
            @Override
            public int compare(Object o1, Object o2) {
                CompareToBuilder compareToBuilder = new CompareToBuilder();
                for (Map.Entry<String, List<Object>> entry : executionContext.getOutputValues().entrySet()) {
                    List<Object> outputValues = entry.getValue();
                    if (outputValues != null && !outputValues.isEmpty()) {
                        noOutputValuesPresent = false;
                        compareToBuilder.append(((Map<String, Object>) o1).get(entry.getKey()),
                                ((Map<String, Object>) o2).get(entry.getKey()),
                                new OutputOrderComparator<>(outputValues.toArray(new Comparable[outputValues.size()])));
                    }
                }

                if (!noOutputValuesPresent) {
                    return compareToBuilder.toComparison();
                } else {
                    if (CommandContextUtil.getDmnEngineConfiguration().isStrictMode()) {
                        throw new FlowableException(String.format("HitPolicy %s violated; no output values present.", getHitPolicyName()));
                    } else {
                        executionContext.getAuditContainer().setValidationMessage(
                                String.format("HitPolicy %s violated; no output values present. Setting first valid result as final result.",
                                        getHitPolicyName()));
                    }

                    return 0;
                }
            }
        });

        if (!ruleResults.isEmpty()) {
            executionContext.getAuditContainer().addDecisionResultObject(ruleResults.get(0));
        }

    }
}

View on GitHub (pinned to d6d39ce1c6)