diff --git a/spring-binding/src/main/java/org/springframework/binding/expression/ognl/OgnlExpressionParser.java b/spring-binding/src/main/java/org/springframework/binding/expression/ognl/OgnlExpressionParser.java index e06a9972..db0b509f 100644 --- a/spring-binding/src/main/java/org/springframework/binding/expression/ognl/OgnlExpressionParser.java +++ b/spring-binding/src/main/java/org/springframework/binding/expression/ognl/OgnlExpressionParser.java @@ -133,6 +133,9 @@ public class OgnlExpressionParser implements ExpressionParser { public Expression parseExpression(String expressionString, ParserContext context) throws ParserException { Assert.notNull(expressionString, "The expression string to parse is required"); + if (expressionString.length() == 0) { + return parseEmptyExpressionString(context); + } Expression[] expressions = parseExpressions(expressionString, context); if (expressions.length == 1) { return expressions[0]; @@ -192,6 +195,19 @@ public class OgnlExpressionParser implements ExpressionParser { // helper methods + /** + * Helper that handles a empty expression string. + */ + private Expression parseEmptyExpressionString(ParserContext context) { + if (allowUndelimitedEvalExpressions) { + // let the parser handle it + return doParseExpression("", context); + } else { + // return a literal expression containing the empty string + return new LiteralExpression(""); + } + } + /** * Helper that parses given expression string using the configured parser. The expression string can contain any * number of expressions all contained in "${...}" markers. For instance: "foo${expr0}bar${expr1}". The static diff --git a/spring-binding/src/test/java/org/springframework/binding/expression/el/ELExpressionParserTests.java b/spring-binding/src/test/java/org/springframework/binding/expression/el/ELExpressionParserTests.java index b2b85f25..aa3e27e5 100644 --- a/spring-binding/src/test/java/org/springframework/binding/expression/el/ELExpressionParserTests.java +++ b/spring-binding/src/test/java/org/springframework/binding/expression/el/ELExpressionParserTests.java @@ -40,6 +40,12 @@ public class ELExpressionParserTests extends TestCase { } } + public void testParseEmptyExpressionString() { + String expressionString = ""; + Expression exp = parser.parseExpression(expressionString, null); + assertEquals("", exp.getValue(null)); + } + public void testParseSimpleEvalExpressionNoEvalContextWithTypeCoersion() { String expressionString = "#{3 + 4}"; Expression exp = parser.parseExpression(expressionString, new ParserContextImpl().expect(Integer.class));