alibaba/spring-ai-alibaba · error · BizException
WORKFLOW_EXECUTE_ERROR
WORKFLOW_EXECUTE_ERROR
Error message
plugin execute failed
What it means
PluginExecuteProcessor.innerExecute wraps any exception thrown by toolExecutionService.executeTool for a plugin node and rethrows it as a BizException with WORKFLOW_EXECUTE_ERROR and message 'plugin execute failed'. The original cause is attached as the nested exception.
Source
Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-core/src/main/java/com/alibaba/cloud/ai/studio/core/workflow/processor/impl/PluginExecuteProcessor.java:82
super(redisManager, workflowInnerService, conversationChatMemory, commonConfig);
this.toolExecutionService = toolExecutionService;
}
@Override
public NodeResult innerExecute(DirectedAcyclicGraph<String, Edge> graph, Node node, WorkflowContext context) {
long start = System.currentTimeMillis();
ToolExecutionResult result;
NodeResult nodeResult = new NodeResult();
nodeResult.setNodeId(node.getId());
nodeResult.setNodeName(node.getName());
nodeResult.setNodeType(node.getType());
nodeResult.setInput(JsonUtils.toJson(constructInputParamsMap(node, context)));
ToolExecutionRequest toolExecutionRequest = buildToolRequest(node, context);
try {
result = toolExecutionService.executeTool(toolExecutionRequest);
}
catch (Exception e) {
throw new BizException(ErrorCode.WORKFLOW_EXECUTE_ERROR.toError("plugin execute failed"), e);
}
finally {
log.info("plugin execute cost: {}ms, requestId:{}", System.currentTimeMillis() - start,
context.getRequestId());
}
if (result == null || !result.isSuccess()) {
nodeResult.setOutput(null);
Error error = result.getError();
nodeResult.setErrorInfo(error == null ? null : error.getMessage());
nodeResult.setError(error);
nodeResult.setNodeStatus(NodeStatusEnum.FAIL.getCode());
return nodeResult;
}
nodeResult.setOutput(result.getOutput());
nodeResult.setNodeStatus(NodeStatusEnum.SUCCESS.getCode());
nodeResult.setUsages(null);
return nodeResult;
}View on GitHub (pinned to f82da0b50f)
Solutions
- Inspect the nested cause (BizException getCause()) and the plugin execute logs to find the real failure.
- Test the plugin standalone (outside the workflow) with the same inputs to reproduce.
- Validate the plugin node's input parameter mappings against the tool's current schema.
- Check plugin credentials/endpoint availability and network egress from the admin-server host.
- Catch WORKFLOW_EXECUTE_ERROR on plugin nodes and configure a fallback/error branch in the workflow.
Example fix
// before String result = (String) pluginInput; // schema changed, now expects object // after Map<String,Object> result = JsonUtils.parseMap(pluginInput);
Defensive patterns
Strategy: try-catch
Validate before calling
// validate plugin inputs against the tool schema before running the workflow JsonSchema validator = JsonSchema.of(tool.getInputSchema()); validator.assertValid(nodeInputParams);
Try / catch
try {
workflowExecutor.run(request);
} catch (BizException e) {
Throwable cause = e.getCause(); // original plugin exception
log.error("plugin failed", cause);
} Prevention
- Health-check plugin endpoints and credentials as part of deployment.
- Re-validate plugin input mappings after any plugin schema update.
- Add a workflow error/fallback branch on plugin nodes for graceful degradation.
- Monitor nested causes of WORKFLOW_EXECUTE_ERROR to catch recurring plugin failures early.
When it happens
Trigger: The plugin/tool backing a workflow plugin node throws during execution — e.g. HTTP call failure, auth error, invalid input parameters deserialized into the tool request, or plugin runtime crash.
Common situations: Third-party plugin endpoint down or unreachable; expired plugin credentials; tool schema changed after the workflow was authored so built inputs no longer match; network/DNS issues in the deployment environment.
Related errors
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/85d67a8606333f2a.
Report an issue: GitHub.