diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/util/TextParseUtil.java b/xwork-core/src/main/java/com/opensymphony/xwork2/util/TextParseUtil.java index 07dccfbdd..fb24eb10a 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/util/TextParseUtil.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/util/TextParseUtil.java @@ -153,18 +153,16 @@ public class TextParseUtil { */ public static Object translateVariables(char[] openChars, String expression, final ValueStack stack, final Class asType, final ParsedValueEvaluator evaluator, int maxLoopCount) { - ParsedValueEvaluator ognlEval = new ParsedValueEvaluator() { public Object evaluate(String parsedValue) { Object o = stack.findValue(parsedValue, asType); - if (evaluator != null) { + if (evaluator != null && o != null) { o = evaluator.evaluate(o.toString()); } return o; } }; - TextParser parser = ((Container)stack.getContext().get(ActionContext.CONTAINER)).getInstance(TextParser.class); XWorkConverter conv = ((Container)stack.getContext().get(ActionContext.CONTAINER)).getInstance(XWorkConverter.class); diff --git a/xwork-core/src/test/java/com/opensymphony/xwork2/util/TextParseUtilTest.java b/xwork-core/src/test/java/com/opensymphony/xwork2/util/TextParseUtilTest.java index 3e31f9f5b..e18fb0f77 100644 --- a/xwork-core/src/test/java/com/opensymphony/xwork2/util/TextParseUtilTest.java +++ b/xwork-core/src/test/java/com/opensymphony/xwork2/util/TextParseUtilTest.java @@ -138,4 +138,22 @@ public class TextParseUtilTest extends XWorkTestCase { assertEquals("foo: 2", s); } + public void testTranslateVariablesWithNull() { + // given + ValueStack stack = ActionContext.getContext().getValueStack(); + stack.push(new HashMap() {{ put("foo", null); }}); + + TextParseUtil.ParsedValueEvaluator evaluator = new TextParseUtil.ParsedValueEvaluator() { + public Object evaluate(String parsedValue) { + return parsedValue; + } + }; + + // when + Object s = TextParseUtil.translateVariables('$', "foo: ${foo}", stack, String.class, evaluator, 2); + + // then + assertEquals("foo: ", s); + } + }