private synchronized String interpolateNamedArguments(MessageContext messageContext,
String messageDescriptor,
List<NamedArgument> namedArguments)
{
ExpressionFactory factory = this.elProvider.createExpressionFactory();
SimpleELContext elContext = this.elProvider.createELContext(this.elProvider.createELResolver());
for (NamedArgument argument : namedArguments)
{
Serializable value = argument.getValue();
Class valueType = value != null ? value.getClass() : Object.class;
elContext.setVariable(argument.getName(), factory.createValueExpression(value, valueType));
}
Matcher matcher = MESSAGE_ARGS_PATTERN.matcher(messageDescriptor);
StringBuffer buffer = new StringBuffer();
while (matcher.find())