flowable/flowable-engine · error · FlowableException
Failed to parse jase
Error message
Failed to parse jase
What it means
Flowable wraps Jackson 3 (tools.jackson) JsonProcessingException in a FlowableException when converting a value that is a Jackson 3 JsonNode into a Jackson 2 JsonNode inside FlowableJackson2JsonNode.asJsonNode. The conversion re-serializes the node via value.toString() and parses it back; malformed or non-representable node content makes readTree fail. The message contains the typo 'jase' (presumably 'parse').
Source
Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2JsonNode.java:208
return jsonNode.getNodeType().name();
}
protected static JsonNode asJsonNode(FlowableJsonNode value) {
if (value == null) {
return NullNode.getInstance();
}
return asJsonNode(value.getImplementationValue(), ObjectMapper::new);
}
protected static JsonNode asJsonNode(Object value, Supplier<ObjectMapper> objectMapperSupplier) {
if (value instanceof JsonNode) {
return (JsonNode) value;
} else if (JsonUtil.isJsonNode(value)) {
// This means it is a Jackson 3 node
try {
return objectMapperSupplier.get().readTree(value.toString());
} catch (JsonProcessingException e) {
throw new FlowableException("Failed to parse jase", e);
}
} else {
throw new FlowableException("Unsupported value type " + (value == null ? "null" : value.getClass().getName()));
}
}
public static FlowableJsonNode wrap(JsonNode jsonNode) {
if (jsonNode instanceof ArrayNode arrayNode) {
return new FlowableJackson2ArrayNode(arrayNode);
} else if (jsonNode instanceof ObjectNode objectNode) {
return new FlowableJackson2ObjectNode(objectNode);
} else if (jsonNode != null) {
return new FlowableJackson2JsonNode<>(jsonNode);
}
return null;
}
}
View on GitHub (pinned to d6d39ce1c6)
Solutions
- Inspect the failing value's toString() output and fix the source that produced non-JSON-representable node content
- Standardize on a single Jackson version for flowable variables (avoid passing Jackson 3 nodes into Jackson 2 APIs)
- Read the chained cause (FlowableException e) to see the exact Jackson parse error location
Example fix
// before
JsonNode n = FlowableJackson2JsonNode.asJsonNode(jackson3Node);
// after: convert explicitly at the boundary
JsonNode n = FlowableJackson2JsonNode.asJsonNode(
objectMapper.readTree(jackson3Node.toString())); Defensive patterns
Strategy: try-catch
Validate before calling
if (value != null && !JsonUtil.isJsonNode(value) && !(value instanceof JsonNode)) throw new IllegalArgumentException("Not a JSON node"); Type guard
boolean isConvertibleJsonNode(Object v) { return v instanceof com.fasterxml.jackson.databind.JsonNode || JsonUtil.isJsonNode(v); } Try / catch
try { node = FlowableJackson2JsonNode.asJsonNode(value); } catch (FlowableException e) { logger.error("JSON round-trip failed: {}", e.getCause(), e); throw e; } Prevention
- Use one Jackson major version consistently across the app and Flowable
- Log the offending value's toString() when conversion fails
- Test variable round-trips between engine APIs after upgrading Flowable
When it happens
Trigger: Calling FlowableJackson2JsonNode.asJsonNode(Object) with a value for which JsonUtil.isJsonNode(value) is true (a Jackson 3 node) whose toString() output cannot be parsed as JSON by the Jackson 2 ObjectMapper.
Common situations: Mixed Jackson 2 / Jackson 3 usage in one application (libraries pulling in both); custom or non-standard JSON node content that does not round-trip through toString; version migration where variables stored by a Jackson 3 path are read via the Jackson 2 API.
Understand the failure class
Background: JSON parse error: "Unexpected token" / "not valid JSON" / "failed to parse" — what JSON parsers are really complaining about — this error's family across 45 libraries.
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- Error writing app model to json
- Error writing form model response
- Unsupported value type ${value == null ? "null" : value.getC
- Unsupported value type " + (value == null ? "null" : value.g
- An error occurs converting output value as JSon
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/f66a33fc6aac040a.
Report an issue: GitHub.