Skip to content

Commit e5c8dc0

Browse files
committed
MessageSource.getMessage returns null default message as-is (again)
Issue: SPR-16127
1 parent 295e3b6 commit e5c8dc0

File tree

8 files changed

+29
-13
lines changed

8 files changed

+29
-13
lines changed

spring-context/src/main/java/org/springframework/context/MessageSource.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public interface MessageSource {
5353
* otherwise the default message passed as a parameter
5454
* @see java.text.MessageFormat
5555
*/
56+
@Nullable
5657
String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale);
5758

5859
/**

spring-context/src/main/java/org/springframework/context/support/AbstractMessageSource.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,7 @@ public final String getMessage(String code, @Nullable Object[] args, @Nullable S
143143
return msg;
144144
}
145145
if (defaultMessage == null) {
146-
String fallback = getDefaultMessage(code);
147-
return (fallback != null ? fallback : "");
146+
return getDefaultMessage(code);
148147
}
149148
return renderDefaultMessage(defaultMessage, args, locale);
150149
}
@@ -264,8 +263,7 @@ protected String getMessageFromParent(String code, @Nullable Object[] args, Loca
264263
else {
265264
// Check parent MessageSource, returning null if not found there.
266265
// Covers custom MessageSource impls and DelegatingMessageSource.
267-
String msg = parent.getMessage(code, args, null, locale);
268-
return ("".equals(msg) ? null : msg);
266+
return parent.getMessage(code, args, null, locale);
269267
}
270268
}
271269
// Not found in parent either.

spring-context/src/main/java/org/springframework/context/support/DelegatingMessageSource.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public MessageSource getParentMessageSource() {
5454

5555

5656
@Override
57+
@Nullable
5758
public String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale) {
5859
if (this.parentMessageSource != null) {
5960
return this.parentMessageSource.getMessage(code, args, defaultMessage, locale);
@@ -62,7 +63,7 @@ else if (defaultMessage != null) {
6263
return renderDefaultMessage(defaultMessage, args, locale);
6364
}
6465
else {
65-
return "";
66+
return null;
6667
}
6768
}
6869

spring-context/src/main/java/org/springframework/context/support/MessageSourceAccessor.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ protected Locale getDefaultLocale() {
8484
* @return the message
8585
*/
8686
public String getMessage(String code, String defaultMessage) {
87-
return this.messageSource.getMessage(code, null, defaultMessage, getDefaultLocale());
87+
String msg = this.messageSource.getMessage(code, null, defaultMessage, getDefaultLocale());
88+
return (msg != null ? msg : "");
8889
}
8990

9091
/**
@@ -95,7 +96,8 @@ public String getMessage(String code, String defaultMessage) {
9596
* @return the message
9697
*/
9798
public String getMessage(String code, String defaultMessage, Locale locale) {
98-
return this.messageSource.getMessage(code, null, defaultMessage, locale);
99+
String msg = this.messageSource.getMessage(code, null, defaultMessage, locale);
100+
return (msg != null ? msg : "");
99101
}
100102

101103
/**
@@ -106,7 +108,8 @@ public String getMessage(String code, String defaultMessage, Locale locale) {
106108
* @return the message
107109
*/
108110
public String getMessage(String code, @Nullable Object[] args, String defaultMessage) {
109-
return this.messageSource.getMessage(code, args, defaultMessage, getDefaultLocale());
111+
String msg = this.messageSource.getMessage(code, args, defaultMessage, getDefaultLocale());
112+
return (msg != null ? msg : "");
110113
}
111114

112115
/**
@@ -118,7 +121,8 @@ public String getMessage(String code, @Nullable Object[] args, String defaultMes
118121
* @return the message
119122
*/
120123
public String getMessage(String code, @Nullable Object[] args, String defaultMessage, Locale locale) {
121-
return this.messageSource.getMessage(code, args, defaultMessage, locale);
124+
String msg = this.messageSource.getMessage(code, args, defaultMessage, locale);
125+
return (msg != null ? msg : "");
122126
}
123127

124128
/**

spring-context/src/test/java/org/springframework/context/support/ResourceBundleMessageSourceTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ protected void doTestMessageAccess(
162162
assertEquals("Hello, message1", ac.getMessage("hello", args, Locale.ENGLISH));
163163

164164
// test default message without and with args
165+
assertNull(ac.getMessage(null, null, null, Locale.ENGLISH));
165166
assertEquals("default", ac.getMessage(null, null, "default", Locale.ENGLISH));
166167
assertEquals("default", ac.getMessage(null, args, "default", Locale.ENGLISH));
167168
assertEquals("{0}, default", ac.getMessage(null, null, "{0}, default", Locale.ENGLISH));

spring-webflux/src/main/java/org/springframework/web/reactive/result/view/RequestContext.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,9 @@ public String getMessage(String code, @Nullable List<?> args, String defaultMess
282282
*/
283283
public String getMessage(String code, @Nullable Object[] args, String defaultMessage, boolean htmlEscape) {
284284
String msg = this.messageSource.getMessage(code, args, defaultMessage, this.locale);
285+
if (msg == null) {
286+
return "";
287+
}
285288
return (htmlEscape ? HtmlUtils.htmlEscape(msg) : msg);
286289
}
287290

spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContext.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,9 @@ public String getMessage(String code, @Nullable List<?> args, String defaultMess
653653
*/
654654
public String getMessage(String code, @Nullable Object[] args, String defaultMessage, boolean htmlEscape) {
655655
String msg = this.webApplicationContext.getMessage(code, args, defaultMessage, getLocale());
656+
if (msg == null) {
657+
return "";
658+
}
656659
return (htmlEscape ? HtmlUtils.htmlEscape(msg) : msg);
657660
}
658661

@@ -732,7 +735,8 @@ public String getMessage(MessageSourceResolvable resolvable, boolean htmlEscape)
732735
* @return the message
733736
*/
734737
public String getThemeMessage(String code, String defaultMessage) {
735-
return getTheme().getMessageSource().getMessage(code, null, defaultMessage, getLocale());
738+
String msg = getTheme().getMessageSource().getMessage(code, null, defaultMessage, getLocale());
739+
return (msg != null ? msg : "");
736740
}
737741

738742
/**
@@ -745,7 +749,8 @@ public String getThemeMessage(String code, String defaultMessage) {
745749
* @return the message
746750
*/
747751
public String getThemeMessage(String code, @Nullable Object[] args, String defaultMessage) {
748-
return getTheme().getMessageSource().getMessage(code, args, defaultMessage, getLocale());
752+
String msg = getTheme().getMessageSource().getMessage(code, args, defaultMessage, getLocale());
753+
return (msg != null ? msg : "");
749754
}
750755

751756
/**
@@ -758,8 +763,9 @@ public String getThemeMessage(String code, @Nullable Object[] args, String defau
758763
* @return the message
759764
*/
760765
public String getThemeMessage(String code, @Nullable List<?> args, String defaultMessage) {
761-
return getTheme().getMessageSource().getMessage(code, (args != null ? args.toArray() : null),
766+
String msg = getTheme().getMessageSource().getMessage(code, (args != null ? args.toArray() : null),
762767
defaultMessage, getLocale());
768+
return (msg != null ? msg : "");
763769
}
764770

765771
/**

spring-webmvc/src/main/java/org/springframework/web/servlet/tags/MessageTag.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ public void release() {
300300
this.arguments = null;
301301
}
302302

303+
303304
/**
304305
* Resolve the specified message into a concrete message String.
305306
* The returned message String should be unescaped.
@@ -322,8 +323,9 @@ protected String resolveMessage() throws JspException, NoSuchMessageException {
322323

323324
if (this.text != null) {
324325
// We have a fallback text to consider.
325-
return messageSource.getMessage(
326+
String msg = messageSource.getMessage(
326327
this.code, argumentsArray, this.text, getRequestContext().getLocale());
328+
return (msg != null ? msg : "");
327329
}
328330
else {
329331
// We have no fallback text to consider.

0 commit comments

Comments
 (0)