在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:
- 直接获取决策定义详情:
- 请求:
GET /engine-rest/decision-definition?key=your-decision-key&latestVersion=true - 响应体中
inputs数组的每个元素包含name字段,即为输入变量名。
- 请求:
- 获取DMN模型XML后自行解析:
- 请求:
GET /engine-rest/decision-definition/{decisionDefinitionId}/dmn-model - 返回完整的DMN XML内容,可通过XML解析工具提取
<input>元素的变量名属性。
- 请求:
内容的提问来源于stack exchange,提问作者resendecode
相关产品推荐
相关产品推荐

