flowable/flowable-engine · warning

Unsupported payload type: {}

Error message

Unsupported payload type: {} 

What it means

DefaultJsonPayloadValueTransformer.converts a JSON payload node to a Java value based on the payload definition's declared type (string, integer, long, boolean, date, json...). When the declared type is not one of the known EventPayloadTypes constants, the transformer logs a warning and falls back to returning the node's string representation.

Source

Thrown at modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/DefaultJsonPayloadValueTransformer.java:49

            value = parameterNode.asString();

        } else if (EventPayloadTypes.BOOLEAN.equals(definitionType)) {
            value = parameterNode.booleanValue(false);

        } else if (EventPayloadTypes.INTEGER.equals(definitionType)) {
            value = parameterNode.intValue(0);

        } else if (EventPayloadTypes.DOUBLE.equals(definitionType)) {
            value = parameterNode.doubleValue(0.0d);

        } else if (EventPayloadTypes.LONG.equals(definitionType)) {
            value = parameterNode.longValue(0L);

        } else if (EventPayloadTypes.JSON.equals(definitionType)) {
            value = parameterNode;

        } else {
            LOGGER.warn("Unsupported payload type: {} ", definitionType);
            value = parameterNode.asString();

        }

        return value;
    }
}

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Change the payload definition's definitionType in the event model JSON to a supported EventPayloadTypes value (string, integer, long, boolean, date, json)
  2. If you truly need a custom type, implement/extend a payload value transformer and register it instead of relying on the default
  3. Verify the event registry model version matches the Flowable runtime version
  4. If string output is acceptable, you can ignore the warning, but be aware values arrive as String

Example fix

// before (event model JSON)
{"name":"amount","type":"double"}
// after
{"name":"amount","type":"long"}
Defensive patterns

Strategy: validation

Validate before calling

Set<String> supported = Set.of("string","integer","long","boolean","date","json");
for (EventPayloadDefinition p : eventModel.getPayload()) {
    if (!supported.contains(p.getType())) {
        throw new IllegalArgumentException("Unsupported payload type: " + p.getType());
    }
}

Type guard

boolean isSupportedPayloadType(String t) {
    return t != null && EventPayloadTypes.ALL.contains(t);
}

Prevention

When it happens

Trigger: An event payload definition (in the event registry JSON model) declares a definitionType string that does not match any supported EventPayloadTypes constant (e.g. 'double', 'float', or a misspelled type), and a payload value is transformed when receiving/handling the event.

Common situations: Hand-edited event registry model JSON with an unsupported type; version mismatch between the registry model and the runtime's supported payload types; custom payload types registered in the model but not recognized by the default transformer.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


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