flowable/flowable-engine · error · ActivitiException
Illegal format for version
Error message
Illegal format for version: <versionString>
What it means
getCleanVersion extracts the numeric portion of a version string read from the database schema version table. If the string does not match CLEAN_VERSION_REGEX, Flowable cannot determine the schema version and throws this ActivitiException. It guards schema upgrade logic against unparseable version values.
Solutions
- Query the schema version table and fix the VERSION value to a plain numeric string (e.g. '6.7.2')
- If the table belongs to another product's schema, point the engine at the correct database/schema
- If the schema is in an unknown state, drop and recreate it via databaseSchemaUpdate=true on a clean database
- Compare the stored version against your engine version to detect a version mismatch
Example fix
// before UPDATE ACT_GE_PROPERTY SET VALUE_ = 'v6' WHERE NAME_ = 'schema.version'; // after UPDATE ACT_GE_PROPERTY SET VALUE_ = '6.7.2' WHERE NAME_ = 'schema.version';
Defensive patterns
Strategy: validation
Validate before calling
String v = jdbcTemplate.queryForObject(
"SELECT VALUE_ FROM ACT_GE_PROPERTY WHERE NAME_='schema.version'", String.class);
if (v == null || !v.matches("\\d+(\.\\d+)*")) {
throw new IllegalStateException("Unparseable schema version in DB: " + v);
} Prevention
- Never hand-edit the schema version property row
- Only run engines against schemas they created or officially migrated
- Snapshot the DB before upgrades so corrupted version rows can be restored
When it happens
Trigger: Schema version lookup (e.g. table ACT_GE_PROPERTY / FLW_EV_DATABASECHANGELOG) returns a version string that does not match the expected numeric pattern, e.g. '5.x', empty string, or arbitrary text in the VERSION column.
Common situations: Manually edited version rows in the property table, schemas created by a different/incompatible engine, or corrupted/migrated databases left with non-numeric version values.
Understand the failure class
Background: "invalid id" errors: invalid identifier format — why libraries reject IDs before lookup, and how to fix them — this error's family across 37 libraries.
Related errors
- Activiti database problem
- Could not set database schema on connection
- Could not update Flowable database schema: unknown version…
- couldn't check if tables are already present using metadata
- couldn't get db schema version
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/8a8682a357d38922.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable5-engine/src/main/java/org/activiti/engine/impl/db/DbSqlSession.java:1031
tables = databaseMetaData.getTables(catalog, schema, tableName, JDBC_METADATA_TABLE_TYPES);
return tables.next();
} finally {
try {
tables.close();
} catch (Exception e) {
LOGGER.error("Error closing meta data tables", e);
}
}
} catch (Exception e) {
throw new ActivitiException("couldn't check if tables are already present using metadata: " + e.getMessage(), e);
}
}
protected String getCleanVersion(String versionString) {
Matcher matcher = CLEAN_VERSION_REGEX.matcher(versionString);
if (!matcher.find()) {
throw new ActivitiException("Illegal format for version: " + versionString);
}
String cleanString = matcher.group();
try {
Double.parseDouble(cleanString); // try to parse it, to see if it is really a number
return cleanString;
} catch (NumberFormatException nfe) {
throw new ActivitiException("Illegal format for version: " + versionString, nfe);
}
}
protected String prependDatabaseTablePrefix(String tableName) {
return dbSqlSessionFactory.getDatabaseTablePrefix() + tableName;
}
protected String readNextTrimmedLine(BufferedReader reader) throws IOException {
String line = reader.readLine();
if (line != null) {View on GitHub (pinned to d6d39ce1c6)