You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Java中获取DMN决策变量列表的技术问询

解决方案:自动提取Camunda DMN的输入变量名

针对你需要从DMN文件中自动提取输入变量名的需求,以下是三种可行的实现方式,均基于Camunda官方公开API,避免依赖内部实现类:

一、使用Camunda Java Engine API(部署后获取)

当DMN已部署到Camunda引擎后,可通过公开的Repository API获取决策定义的输入变量信息,无需引用内部实现类:

import org.camunda.bpm.engine.DecisionService;
import org.camunda.bpm.engine.repository.DecisionDefinition;
import org.camunda.bpm.engine.repository.DecisionInput;
import org.camunda.bpm.engine.variable.VariableMap;
import org.camunda.bpm.engine.variable.Variables;

// 获取DecisionService实例(可通过Spring注入或引擎工厂获取)
DecisionService decisionService = ...;

// 根据决策key查询最新版本的决策定义
DecisionDefinition decisionDefinition = decisionService.createDecisionDefinitionQuery()
    .decisionDefinitionKey("your-decision-key") // 替换为你的DMN决策key
    .latestVersion()
    .singleResult();

// 提取所有输入变量名
List<String> inputVariableNames = new ArrayList<>();
if (decisionDefinition != null) {
    for (DecisionInput input : decisionDefinition.getInputs()) {
        inputVariableNames.add(input.getName());
    }
}

// 动态构建VariableMap(假设userInputValues为用户传入的键值对集合)
VariableMap variables = Variables.createVariables();
Map<String, Object> userInputValues = ...;
for (String varName : inputVariableNames) {
    variables.putValue(varName, userInputValues.get(varName));
}

说明:DecisionInput是Camunda公开的接口,属于org.camunda.bpm.engine.repository包,不存在导入路径问题;你之前尝试的DecisionInputImpl是内部实现类,不应该直接引用。

二、直接解析DMN XML文件(无需部署)

如果无需依赖引擎部署,可使用Camunda DMN模型API直接读取本地或远程DMN文件,提取变量信息:

import org.camunda.bpm.dmn.engine.DmnEngine;
import org.camunda.bpm.dmn.engine.DmnEngineConfiguration;
import org.camunda.bpm.dmn.engine.DmnDecision;
import org.camunda.bpm.dmn.engine.DmnDecisionInput;

// 初始化DMN引擎
DmnEngine dmnEngine = DmnEngineConfiguration.createDefaultDmnEngineConfiguration().buildEngine();

// 读取DMN文件(替换为你的文件路径或输入流)
File dmnFile = new File("path/to/your/decision.dmn");
DmnDecision decision = dmnEngine.parseDecision("your-decision-id", dmnFile);

// 提取输入变量名
List<String> inputVariableNames = new ArrayList<>();
for (DmnDecisionInput input : decision.getInputs()) {
    inputVariableNames.add(input.getName());
}

说明:这种方式适合在引擎外部预处理DMN文件,提前获取变量元数据。

三、REST API方式(远程调用场景)

如果需要通过REST接口获取变量名,可调用Camunda官方REST API:

  1. 直接获取决策定义详情:
    • 请求:GET /engine-rest/decision-definition?key=your-decision-key&latestVersion=true
    • 响应体中inputs数组的每个元素包含name字段,即为输入变量名。
  2. 获取DMN模型XML后自行解析:
    • 请求:GET /engine-rest/decision-definition/{decisionDefinitionId}/dmn-model
    • 返回完整的DMN XML内容,可通过XML解析工具提取<input>元素的变量名属性。

内容的提问来源于stack exchange,提问作者resendecode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:55:18