Browse Source

ResourceBundleMessageSource checks containsKey before calling getString

Issue: SPR-13295
pull/851/head
Juergen Hoeller 9 years ago
parent
commit
2c2bed2adb
  1. 32
      spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java

32
spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java

@ -372,15 +372,31 @@ public class ResourceBundleMessageSource extends AbstractMessageSource implement
} }
} }
private String getStringOrNull(ResourceBundle bundle, String key) { /**
try { * Efficiently retrieve the String value for the specified key,
return bundle.getString(key); * or return {@code null} if not found.
} * <p>As of 4.2, the default implementation checks {@code containsKey}
catch (MissingResourceException ex) { * before it attempts to call {@code getString} (which would require
// Assume key not found * catching {@code MissingResourceException} for key not found).
// -> do NOT throw the exception to allow for checking parent message source. * <p>Can be overridden in subclasses.
return null; * @param bundle the ResourceBundle to perform the lookup in
* @param key the key to look up
* @return the associated value, or {@code null} if none
* @since 4.2
* @see ResourceBundle#getString(String)
* @see ResourceBundle#containsKey(String)
*/
protected String getStringOrNull(ResourceBundle bundle, String key) {
if (bundle.containsKey(key)) {
try {
return bundle.getString(key);
}
catch (MissingResourceException ex){
// Assume key not found for some other reason
// -> do NOT throw the exception to allow for checking parent message source.
}
} }
return null;
} }
/** /**

Loading…
Cancel
Save