diff --git a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/BusinessRuleTaskHandler.java b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/BusinessRuleTaskHandler.java index 6956bf551fc..d1c965e77c1 100755 --- a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/BusinessRuleTaskHandler.java +++ b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/BusinessRuleTaskHandler.java @@ -70,9 +70,20 @@ protected Node handleNode(final Node node, final Element element, final String u } } - String namespace = parameters.get(NAMESPACE_PROP); - String model = parameters.get(MODEL_PROP); - String decision = parameters.get(DECISION_PROP); + String namespace = parameters.getOrDefault(NAMESPACE_PROP, ""); + String model = parameters.getOrDefault(MODEL_PROP, ""); + String decision = parameters.getOrDefault(DECISION_PROP, ""); + String variableRegex = "#\\{[^}]+}"; + if (namespace.matches(variableRegex)) { + namespace = resolveProcessVariable(namespace, parser, element); + } + if (model.matches(variableRegex)) { + model = resolveProcessVariable(model, parser, element); + } + if (decision.matches(variableRegex)) { + decision = resolveProcessVariable(decision, parser, element); + } + ruleSetNode.setRuleType(RuleType.decision( namespace, model, @@ -94,7 +105,6 @@ public void writeNode(Node node, StringBuilder xmlDump, int metaDataType) { RuleType ruleType = ruleSetNode.getRuleType(); if (ruleType != null) { xmlDump.append("g:ruleFlowGroup=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(ruleType.getName()) + "\" " + EOL); - // else DMN } xmlDump.append(" implementation=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(ruleSetNode.getLanguage()) + "\" >" + EOL); @@ -104,4 +114,13 @@ public void writeNode(Node node, StringBuilder xmlDump, int metaDataType) { endNode("businessRuleTask", xmlDump); } + private String resolveProcessVariable(String expression, Parser parser, Element element) { + + String varName = expression.substring(expression.indexOf("#{") + 2, expression.indexOf("}")); + + String variableValue = element.getAttribute(varName); + + return expression.replace("#{" + varName + "}", variableValue); + } + }