diff --git a/spring-binding/src/main/java/org/springframework/binding/message/MessageContextErrors.java b/spring-binding/src/main/java/org/springframework/binding/message/MessageContextErrors.java index 7b5153af..84e4e112 100644 --- a/spring-binding/src/main/java/org/springframework/binding/message/MessageContextErrors.java +++ b/spring-binding/src/main/java/org/springframework/binding/message/MessageContextErrors.java @@ -26,6 +26,7 @@ import org.springframework.binding.expression.support.FluentParserContext; import org.springframework.binding.mapping.MappingResult; import org.springframework.binding.mapping.MappingResults; import org.springframework.binding.mapping.MappingResultsCriteria; +import org.springframework.util.StringUtils; import org.springframework.validation.AbstractErrors; import org.springframework.validation.Errors; import org.springframework.validation.FieldError; @@ -81,7 +82,7 @@ public class MessageContextErrors extends AbstractErrors { public void rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage) { field = fixedField(field); Class fieldType; - if (expressionParser != null) { + if (StringUtils.hasLength(field) && (expressionParser != null)) { FluentParserContext parserContext = new FluentParserContext().evaluate(boundObject.getClass()); fieldType = expressionParser.parseExpression(field, parserContext).getValueType(boundObject); } else { diff --git a/spring-binding/src/test/java/org/springframework/binding/message/MessageContextErrorsTests.java b/spring-binding/src/test/java/org/springframework/binding/message/MessageContextErrorsTests.java index cdfaf97c..b5bf9668 100644 --- a/spring-binding/src/test/java/org/springframework/binding/message/MessageContextErrorsTests.java +++ b/spring-binding/src/test/java/org/springframework/binding/message/MessageContextErrorsTests.java @@ -5,7 +5,9 @@ import java.util.Locale; import junit.framework.TestCase; +import org.springframework.binding.expression.spel.SpringELExpressionParser; import org.springframework.context.support.StaticMessageSource; +import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.validation.DefaultMessageCodesResolver; import org.springframework.validation.MapBindingResult; @@ -68,6 +70,23 @@ public class MessageContextErrorsTests extends TestCase { assertEquals(Severity.ERROR, msg.getSeverity()); } + public void testGlobalError() { + StaticMessageSource messageSource = new StaticMessageSource(); + messageSource.addMessage("foo", Locale.getDefault(), "bar"); + messageSource.addMessage("bar", Locale.getDefault(), "{0}"); + + DefaultMessageContext context = new DefaultMessageContext(messageSource); + Object object = new Object(); + SpringELExpressionParser expressionParser = new SpringELExpressionParser(new SpelExpressionParser()); + MessageContextErrors errors = new MessageContextErrors(context, "object", object, expressionParser, + new DefaultMessageCodesResolver(), null); + errors.rejectValue(null, "bar", new Object[] { "boop" }, null); + Message msg = context.getAllMessages()[0]; + assertEquals("", msg.getSource()); + assertEquals("boop", msg.getText()); + assertEquals(Severity.ERROR, msg.getSeverity()); + } + public void testAddAllErrors() { StaticMessageSource messageSource = new StaticMessageSource(); messageSource.addMessage("foo", Locale.getDefault(), "bar");