flowable/flowable-engine · error · FlowableException
HTTP method not supported
Error message
${method} HTTP method not supported What it means
SpringWebClientFlowableHttpClient.prepareRequest maps an HTTP method name from the FlowableHttpRequestInfo to a Spring WebClient builder branch via a switch. Only GET, POST, PUT, DELETE, PATCH, HEAD and OPTIONS are handled; any other method string falls into the default branch and throws this FlowableException. It is a guard against unsupported HTTP verbs in the reactive WebClient-based HTTP client.
Solutions
- Change the request to one of the supported methods: GET, POST, PUT, DELETE, PATCH, HEAD or OPTIONS.
- If a custom verb is genuinely required, implement a custom FlowableHttpClient that handles the method instead of the Spring WebClient one.
- Verify the method value is not coming from an incorrectly populated process variable or config field (check for typos/whitespace/case).
Example fix
// before <flowable:httpRequest method="PURGE" .../> // after <flowable:httpRequest method="DELETE" .../>
Defensive patterns
Strategy: validation
Validate before calling
Set<String> supported = Set.of("GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS");
if (!supported.contains(method)) {
throw new IllegalArgumentException("Unsupported HTTP method: " + method);
} Try / catch
try {
client.prepareRequest(requestInfo);
} catch (FlowableException e) {
if (e.getMessage().endsWith("HTTP method not supported")) {
// fall back to POST or reject the task
}
} Prevention
- Restrict HTTP task method input to the supported set in your form/schema validation.
- Never take the method verbatim from user-controlled process variables without whitelisting.
When it happens
Trigger: Calling the Spring WebClient Flowable HTTP client with requestInfo.getMethod() set to a verb outside the supported set, e.g. a custom method like 'PURGE' or 'TRACE', or a lowercase/malformed method string.
Common situations: BPMN HTTP task or service task configured with an unusual method in its flowable:httpRequest XML; dynamically built method strings from process variables; older process definitions using methods unsupported by WebClient.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Invalid URL exception occurred
- A request body was expected when bulk updating tasks.
- A request body was expected when bulk updating tasks.
- A request body was expected when executing a task action.
- A request body was expected when updating the task.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/712d3d987c9720b6.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-http-common/src/main/java/org/flowable/http/common/impl/spring/reactive/SpringWebClientFlowableHttpClient.java:162
headersSpec = patch;
break;
}
case "DELETE": {
WebClient.RequestBodySpec delete = webClient.method(HttpMethod.DELETE).uri(uri);
setRequestEntity(requestInfo, delete);
headersSpec = delete;
break;
}
case "HEAD": {
headersSpec = webClient.head().uri(uri);
break;
}
case "OPTIONS": {
headersSpec = webClient.options().uri(uri);
break;
}
default: {
throw new FlowableException(requestInfo.getMethod() + " HTTP method not supported");
}
}
setHeaders(headersSpec, requestInfo.getHttpHeaders());
setHeaders(headersSpec, requestInfo.getSecureHttpHeaders());
return new WebClientExecutableHttpRequest(headersSpec, !requestInfo.isNoRedirects());
} catch (URISyntaxException ex) {
throw new FlowableException("Invalid URL exception occurred", ex);
}
}
public static boolean shouldFollowRedirect(HttpClientRequest request, HttpClientResponse response) {
boolean followRedirect = request.currentContextView().getOrDefault(FOLLOW_REDIRECT_CONTEXT_KEY, Boolean.FALSE);
int statusCode = response.status().code();
return followRedirect && statusCode >= 300 && statusCode < 400;
}
View on GitHub (pinned to d6d39ce1c6)