public VariableLike getVariableByName(Referable referable, String variableName) throws NavigationException { Objects.requireNonNull(variableName, "VariableName must not be null!"); NodeHelper element = new NodeHelper(referable); String elementName = element.getLocalName(); if ("scope".equals(elementName) || "process".equals(elementName)) { Nodes variable = element .toXOM() .query("./bpel:variables/bpel:variable[@name='" + variableName + "']", CONTEXT); if (variable != null && !variable.isEmpty()) { return new VariableElement(variable.get(0), processContainer); } if ("process".equals(elementName)) { throw new NavigationException("Variable does not exist."); } } if ("onEvent".equals(elementName)) { if (variableName.equals(element.getAttribute("variable"))) { return new OnEventElement(element.toXOM(), processContainer); } } if ("catch".equals(elementName)) { if (variableName.equals(element.getAttribute("faultVariable"))) { return new CatchElement(element.toXOM(), processContainer); } } if ("forEach".equals(elementName)) { if (variableName.equals(element.getAttribute("counterName"))) { return new ForEachVariable(element.toXOM(), processContainer); } } return getVariableByName(element.getParent(), variableName); }