flowable/flowable-engine · error · FlowableIllegalArgumentException
Only one of 'orderAscendingColumn' or…
Error message
Only one of 'orderAscendingColumn' or 'orderDescendingColumn' can be supplied.
What it means
GET /management/tables/{tableName} accepts optional sorting parameters orderAscendingColumn and orderDescendingColumn. Supplying both is ambiguous, so a FlowableIllegalArgumentException is thrown. The endpoint only supports one sort direction per request.
Solutions
- Remove one of the two parameters from the request, keeping only the column you want to sort by.
- In client code, mutually exclude the parameters before building the URL.
- Handle HTTP 400 from this endpoint and retry with a single sort parameter.
Example fix
// before params = 'orderAscendingColumn=ID_&orderDescendingColumn=NAME_'; // after params = 'orderAscendingColumn=ID_';
Defensive patterns
Strategy: validation
Validate before calling
if (orderAsc && orderDesc) throw new Error('Supply only one of orderAscendingColumn/orderDescendingColumn'); Try / catch
try { ... } catch (e) { if (e.status === 400) retryWithSingleSort(); else throw e; } Prevention
- Model sorting as a single {column, direction} object in client code so both-direction params are impossible.
- Clear the opposite sort parameter when the user changes sort direction in the UI.
When it happens
Trigger: GET /management/tables/ACT_RU_TASK?orderAscendingColumn=ID_&orderDescendingColumn=NAME_ — both parameters present in the same request.
Common situations: Client code builds the query string dynamically and appends both parameters; a UI with two sort dropdowns sending both values instead of clearing one.
Related errors
- Only one of 'timersOnly' or 'messagesOnly' can be provided.
- Illegal value for delegationState
- Invalid action: ' '.
- No deployment id provided
- No resource name provided
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/25a2131cefadcdb8.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/TableDataResource.java:86
@ApiResponse(code = 200, message = "Indicates the table exists and the table row data is returned"),
@ApiResponse(code = 404, message = "Indicates the requested table does not exist.")
})
@GetMapping(value = "/management/tables/{tableName}/data", produces = "application/json")
public DataResponse<List<Map<String, Object>>> getTableData(@ApiParam(name = "tableName") @PathVariable String tableName, @ApiParam(hidden = true) @RequestParam Map<String, String> allRequestParams) {
if (restApiInterceptor != null) {
restApiInterceptor.accessTableInfo();
}
// Check if table exists before continuing
if (managementService.getTableMetaData(tableName) == null) {
throw new FlowableObjectNotFoundException("Could not find a table with name '" + tableName + "'.", String.class);
}
String orderAsc = allRequestParams.get("orderAscendingColumn");
String orderDesc = allRequestParams.get("orderDescendingColumn");
if (orderAsc != null && orderDesc != null) {
throw new FlowableIllegalArgumentException("Only one of 'orderAscendingColumn' or 'orderDescendingColumn' can be supplied.");
}
Integer start = null;
if (allRequestParams.containsKey("start")) {
start = Integer.valueOf(allRequestParams.get("start"));
}
if (start == null) {
start = 0;
}
Integer size = null;
if (allRequestParams.containsKey("size")) {
size = Integer.valueOf(allRequestParams.get("size"));
}
if (size == null) {
size = DEFAULT_RESULT_SIZE;View on GitHub (pinned to d6d39ce1c6)