return;
}
for (int i_methodCall = 0; i_methodCall < methodCalls.getLength(); i_methodCall++) {
Node methodCallNode = methodCalls.item(i_methodCall);
String methodCallId = getIdAttribute(methodCallNode);
MethodCallBuilder methodCallBuilder = flowBuilder.methodCallNode(methodCallId);
NodeList methodList = (NodeList)
xpath.evaluate(".//ns1:method/text()", methodCallNode, XPathConstants.NODESET);
if (1 != methodList.getLength()) {
throw new XPathExpressionException("Within <method-call> exactly one <method> child is allowed");
}
String methodStr = methodList.item(0).getNodeValue().trim();
NodeList params = (NodeList) xpath.evaluate(".//ns1:parameter",
methodCallNode, XPathConstants.NODESET);
if (null != params) {
List<Class> paramTypes = Collections.emptyList();
if (0 < params.getLength()) {
paramTypes = new ArrayList<Class>();
List<Parameter> paramList = new ArrayList<Parameter>();
Parameter toAdd = null;
ExpressionFactory ef = context.getApplication().getExpressionFactory();
ELContext elContext = context.getELContext();
ValueExpression ve = null;
for (int i_param = 0; i_param < params.getLength(); i_param++) {
Node param = params.item(i_param);
NodeList valueList = (NodeList)
xpath.evaluate(".//ns1:value/text()", param, XPathConstants.NODESET);
if (null == valueList || 1 != valueList.getLength()) {
throw new XPathExpressionException("Within <parameter> exactly one <value> child is allowed");
}
String valueStr = valueList.item(0).getNodeValue().trim();
String classStr = null;
NodeList classList = (NodeList)
xpath.evaluate(".//ns1:class/text()", param, XPathConstants.NODESET);
if (null != classList && 1 < classList.getLength()) {
throw new XPathExpressionException("Within <parameter> at most one <class> child is allowed");
}
if (null != classList && 1 == classList.getLength()) {
classStr = classList.item(0).getNodeValue().trim();
}
Class clazz = String.class;
if (null != classStr) {
try {
clazz = ReflectionUtil.forName(classStr);
} catch (ClassNotFoundException e) {
clazz = Object.class;
}
}
ve = ef.createValueExpression(elContext, valueStr, clazz);
toAdd = new ParameterImpl(classStr, ve);
paramList.add(toAdd);
paramTypes.add(clazz);
}
methodCallBuilder.parameters(paramList);
}
Class [] paramArray = new Class[paramTypes.size()];
paramTypes.toArray(paramArray);
methodCallBuilder.expression(methodStr, paramArray);
}
NodeList defaultOutcomeList = (NodeList)
xpath.evaluate(".//ns1:default-outcome/text()", methodCallNode, XPathConstants.NODESET);
if (null != defaultOutcomeList && 1 < defaultOutcomeList.getLength()) {
throw new XPathExpressionException("Within <method-call> only one <default-outcome> child is allowed");
}
if (null != defaultOutcomeList) {
String defaultOutcomeStr = defaultOutcomeList.item(0).getNodeValue().trim();
methodCallBuilder.defaultOutcome(defaultOutcomeStr);
}
}