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

  1. Inspect the nested cause (BizException getCause()) and the plugin execute logs to find the real failure.
  2. Test the plugin standalone (outside the workflow) with the same inputs to reproduce.
  3. Validate the plugin node's input parameter mappings against the tool's current schema.
  4. Check plugin credentials/endpoint availability and network egress from the admin-server host.
  5. 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

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.