From d5aedac6db5ca6093b38d607bc2a60c59b93e9f9 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 27 Apr 2018 18:24:31 +0200 Subject: [PATCH] Avoid custom ResourceBundle.Control on Jigsaw (as far as possible) Issue: SPR-16776 --- .../support/ResourceBundleMessageSource.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java b/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java index 336c9d3ca0..dad357807b 100644 --- a/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java +++ b/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java @@ -220,7 +220,25 @@ public class ResourceBundleMessageSource extends AbstractResourceBasedMessageSou protected ResourceBundle doGetBundle(String basename, Locale locale) throws MissingResourceException { ClassLoader classLoader = getBundleClassLoader(); Assert.state(classLoader != null, "No bundle ClassLoader set"); - return ResourceBundle.getBundle(basename, locale, classLoader, new MessageSourceControl()); + String defaultEncoding = getDefaultEncoding(); + + if ((defaultEncoding != null && !"ISO-8859-1".equals(defaultEncoding)) || + !isFallbackToSystemLocale() || getCacheMillis() >= 0) { + try { + return ResourceBundle.getBundle(basename, locale, classLoader, new MessageSourceControl()); + } + catch (UnsupportedOperationException ex) { + // Probably in a Jigsaw environment on JDK 9+ + throw new IllegalStateException( + "Custom ResourceBundleMessageSource configuration requires custom ResourceBundle.Control " + + "which is not supported in current system environment (e.g. JDK 9+ module path deployment): " + + "consider using defaults (ISO-8859-1 encoding, fallback to system locale, unlimited caching)", + ex); + } + } + else { + return ResourceBundle.getBundle(basename, locale, classLoader); + } } /**