flowable/flowable-engine · error · FlowableException
Invalid http request field in plan item instance
Error message
Invalid http request field in plan item instance ${planItemInstance.getId()} in plan item ${planItemInstance.getPlanItemDefinitionId()} in case definition ${planItemInstance.getCaseDefinitionId()} What it means
Creating the HTTP request from the CMMN http service task's configured fields failed with a non-FlowableException, which is wrapped in this FlowableException. It indicates an invalid request field configuration (URL, method, headers, body, etc.) in the plan item definition.
Solutions
- Inspect the cause (getCause()) for the exact invalid field, then fix the http request field configuration in the case definition
- Validate the request URL/fields resolve correctly at runtime (log or test the expressions)
- Check field names against the FlowableHttpRequest builder API; typos silently become invalid fields
- Redeploy the corrected case definition
Example fix
// before <flowable:http-request field="url" value="htp://api.example.com" /> // after <flowable:http-request field="url" value="https://api.example.com/orders" />
Defensive patterns
Strategy: try-catch
Validate before calling
try { new java.net.URI(urlExpression); } catch (e) { throw new Error('invalid http request url: ' + url); } Try / catch
try {
executeHttpPlanItem();
} catch (FlowableException e) {
if (e.getMessage().startsWith('Invalid http request field')) { inspect(e.getCause()); }
else throw e;
} Prevention
- Validate URLs and header expressions at design time
- Log expression evaluation results for request fields
- Keep field names matching the FlowableHttpRequest builder API exactly
When it happens
Trigger: DefaultCmmnHttpActivityDelegate.execute calls createRequest and the underlying builder throws (e.g. malformed URL, invalid method, bad header/field expression) for planItemInstance's httpServiceTask.
Common situations: Typo in the http request field name in case XML; expression in url/headers evaluating to null or malformed URL; missing required field; invalid characters in URL.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- Cannot complete CMMN job. There is no CMMN engine available
- Cannot query external jobs. There is no BPMN or CMMN engine…
- Cannot unacquire CMMN job. There is no CMMN engine available
- Case should be validated, but no case validator is…
- CommandInvoker must be the last interceptor in the chain
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/71a7c963d4bae250.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/http/DefaultCmmnHttpActivityDelegate.java:78
@Override
protected FlowableHttpClient createHttpClient() {
HttpClientConfig config = CommandContextUtil.getCmmnEngineConfiguration().getHttpClientConfig();
return config.determineHttpClient();
}
@Override
public CompletableFuture<ExecutionData> execute(DelegatePlanItemInstance planItemInstance, AsyncTaskInvoker taskInvoker) {
RequestData request;
HttpServiceTask httpServiceTask = (HttpServiceTask) planItemInstance.getPlanItemDefinition();
try {
request = createRequest(planItemInstance, httpServiceTask.getId());
} catch (Exception e) {
if (e instanceof FlowableException) {
throw (FlowableException) e;
} else {
throw new FlowableException(HTTP_TASK_REQUEST_FIELD_INVALID + " in plan item instance " + planItemInstance.getId() + " in plan item "
+ planItemInstance.getPlanItemDefinitionId() + " in case definition " + planItemInstance.getCaseDefinitionId(), e);
}
}
CmmnEngineConfiguration cmmnEngineConfiguration = CommandContextUtil.getCmmnEngineConfiguration();
HttpRequestHandler httpRequestHandler = createHttpRequestHandler(httpServiceTask.getHttpRequestHandler(), cmmnEngineConfiguration);
if (httpRequestHandler != null) {
httpRequestHandler.handleHttpRequest(planItemInstance, request.getHttpRequest(), null);
}
// Validate request
validateRequest(request.getHttpRequest());
boolean parallelInSameTransaction;
if (httpServiceTask.getParallelInSameTransaction() != null) {
parallelInSameTransaction = httpServiceTask.getParallelInSameTransaction();
} else {View on GitHub (pinned to d6d39ce1c6)